如何在Maven中获取artificactId的依赖关系?

时间:2015-02-23 08:01:45

标签: maven

我有多模块项目。依赖关系如下:

<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>

并且,在每个模块/依赖项的src/main/resources下,我有一个名为<module>-persistence.zip的ZIP文件(例如C:\gwr-logs-module\src\main\resources\logs-persistence.zip)。我想将每个模块的ZIP文件复制到其他目录下,让我们说C:\users\user\project。我已将maven-resources-plugin定义如下:

<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

1 个答案:

答案 0 :(得分: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),并在每个子模块构建时执行此操作。 / p>

注意:不推荐使用basedir,而是project.basedir.

有关详细信息,请参阅Maven: The Complete Reference, Multi-module vs. Inheritance