我试图弄清楚如何在多模块项目中聚合我的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}
)?我意识到我可以在事后将所有依赖文件夹复制到同一个地方,但我希望能有点清洁。
答案 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 Plugin和a 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>
但正如我所说,这引入了模块和根项目之间的紧密耦合,这根本不是很好(我不会进一步将目标调用作为构建的一部分包含在内,模块应该保持独立,你应该能够在没有“检查”父母的情况下建立一个模块。