2010-08-08 157 views
2

我想弄清楚如何在多模块项目中聚合我的maven依赖关系。举例来说,如果我有:多模块Maven项目中的聚合依赖关系

root pom/project1 
root pom/project2 

,我跑mvn dependency:copy-dependencies,我结束了在依赖关系:

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

我真正想要的是,如果我的根POM运行mvn命令文件夹中,将所有依赖关系复制到root pom/dependency。有没有一个maven属性可以让我得到根目录的输出目录? (类似于${project.build.directory})?我意识到,我可以在事实之后将所有依赖文件夹复制到同一个地方,但我希望有更清洁的东西。

回答

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的主要目的是允许用户将 项目输出及其依赖项,模块,站点文档和其他文件 合并到一个可分发的存档中。

+0

谢谢!这看起来像我所需要的。 – Greg 2010-08-08 21:25:14

1

我真正想要的是,如果我在root pom文件夹中运行mvn命令,所有依赖将被复制到根目录/依赖项。有没有一个maven属性可以让我得到根目录的输出目录? (类似于${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> 

但正如我所说,这引入了模块和根项目是一点都不好(我不会被包括在目标调用作为构建的一部分走得更远之间的紧耦合,模块应该保持独立,你应该能够建立一个模块,而不必“检查”父母)。

+0

我打算尝试汇编插件,谢谢! – Greg 2010-08-08 22:42:15

+0

@Greg你有没有找到一种方法来使用程序集插件做到这一点? – herau 2014-06-06 12:54:18

+0

@herau我不记得我当时做了什么来解决这个问题,但如果我再次用我在过去几年中学到的知识来做这件事,我会使用程序集插件。您只需要在根级添加一个新的Maven模块,您可以将其称为“程序集”或任何您想要的。你会包括所有其它模块在组装项目的POM文件,然后你的装配描述符将包括类似的依赖关系: \t \t \t \t \t 运行 \t \t \t <输出目录>/ \t 这应该让你关闭。 – Greg 2014-06-07 14:31:26

相关问题