多模块Maven项目中的聚合依赖关系

时间:2010-08-08 16:37:43

标签: maven-2

我试图弄清楚如何在多模块项目中聚合我的maven依赖项。例如,如果我有:

root pom/project1
root pom/project2

然后我运行mvn dependency:copy-dependencies,我最终得到了依赖项:

root pom/project1/target/dependency
root pom/project2/target/dependency

我真正想要的是,如果我在root pom文件夹中运行mvn命令,那么所有依赖项都要复制到root pom/dependency。是否有maven属性获取根pom的输出目录? (类似于${project.build.directory})?我意识到我可以在事后将所有依赖文件夹复制到同一个地方,但我希望能有点清洁。

2 个答案:

答案 0 :(得分:1)

您必须配置依赖项插件以将depdendencies复制到特定位置。这可以通过outputDirectory配置属性完成。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
      <execution>
         <id>copy-dependencies</id>
         <phase>package</phase>
         <goals>
            <goal>copy-dependencies</goal>
         </goals>
         <configuration>
              <outputDirectory>${outputDir}</outputDirectory>
         </configuration>
      </execution>
   </executions>
</plugin>

但是如果您尝试这样做以进行分发,我建议您使用maven assembly plugin

创建一个程序集

文档说:

Maven 2.0的Assembly插件主要是为了让用户聚合 项目输出及其依赖项,模块,站点文档和其他文件 到一个可分发的档案库。

答案 1 :(得分:1)

  

我真正想要的是,如果我在root pom文件夹中运行mvn命令,所有依赖项都要复制到root pom / dependency。是否有maven属性获取根pom的输出目录? (类似于${project.build.directory})?

不,因为模块实际上不应该意识到这一点。

  

我意识到我可以在事后将所有依赖文件夹复制到同一个地方,但我希望有点清洁。

Maven方式将使用Maven Assembly Plugina custom descriptor。但是如果你不熟悉Maven Assembly Plugin及其描述符格式,那就不容易了。

一种不太干净但更简单的方法是配置Maven Dependency plugin以使用相对路径将依赖项复制到父项目中。像这样:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <outputDirectory>../root_pom/target/dependency</outputDirectory>
  </configuration>
</plugin>

但正如我所说,这引入了模块和根项目之间的紧密耦合,这根本不是很好(我不会进一步将目标调用作为构建的一部分包含在内,模块应该保持独立,你应该能够在没有“检查”父母的情况下建立一个模块。