2015-02-23 83 views
1

我有多模块项目。依赖关系如下:Maven如何获得artificactId的依赖关系?

<dependencies>    
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-commons</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-places-module</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-devices-module</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-events-module</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-controls-module</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.gwr</groupId> 
     <artifactId>gwr-logs-module</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

而且,在每个模块/依赖我有一个zip文件命名为*****的 “的src/main /资源” - persistence.zip(EGC:\ GWR-日志-module \ src \ main \ resources \ logs-persistence.zip)其中*****是模块名称。我想复制这个每个模块的zip文件在其他目录下让我们说c:\ users \ user \ project。我已经定义了资源插件如下:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy-presubscriptionfiles</id> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${user.home}/${dasmo.storage}/</outputDirectory> 
       <overwrite>true</overwrite> 
       <resources> 
        <resource> 
         <directory>${basedir}/../gwr-logs-module/src/main/resources</directory> 
         <includes> 
          <include>*.zip</include> 
         </includes> 
        </resource> 
        <resource> 
         <directory>${basedir}/../gwr-devices-module/src/main/resources</directory> 
         <includes> 
          <include>*.zip</include> 
         </includes> 
        </resource> 
        <resource> 
         <directory>${basedir}/../gwr-controls-module/src/main/resources</directory> 
         <includes> 
          <include>*.zip</include> 
         </includes> 
        </resource> 
        <resource> 
         <directory>${basedir}/../gwr-events-module/src/main/resources</directory> 
         <includes> 
          <include>*.zip</include> 
         </includes> 
        </resource> 
       </resources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

正如你看到的,在资源节中,我有硬编码每个模块的名称。我怎样才能避免这种情况?我们不能使用每个依赖项的“artifactId”吗?如果是,如何使用它?或者有没有其他的方式来完成这项工作?

非常感谢。 问候, Yeshwant

+0

我不明白你的问题。 http://books.sonatype.com/mvnex-book/reference/multimodule.html – 2015-02-23 09:28:49

+0

Dovy,你能告诉我你在我的问题中没有理解的部分:请参阅我写的代码。我必须一个接一个地写下所有模块的名称,我希望在进行资源复制时避免使用这些模块的名称: – 2015-02-23 09:43:11

+0

我的问题是如何从我的资源插件中的“ gwr-logs-module”中获取artifactId的值。 gwr-logs-module取自定义的依赖关系。 – 2015-02-23 09:45:38

回答

0

您可以在多模块POM的<plugin>部分降低到以下几点:

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-presubscriptionfiles</id> 
     <!-- Note: this phase is more appropriate than 'validate' --> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${user.home}/${dasmo.storage}</outputDirectory> 
     <overwrite>true</overwrite> 
     <resources> 
      <resource> 
      <directory>${project.basedir}/src/main/resources</directory> 
      <!- or likewise 
      <directory>${project.projectDirectory}/src/main/resources</directory> 
      --> 
      <includes> 
       <include>*.zip</include> 
      </includes> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

如果你在任何一个子模块的POM的声明你的多模块项目作为<parent>这将由它们继承(请参阅Introduction to the POM, Project Inheritance),并在每个子模块构建中执行。

注:basedir是赞成project.basedir.

弃用进一步的阅读可见Maven: The Complete Reference, Multi-module vs. Inheritance