我的项目中有多个模块,它们直接或传递地相互依赖。 当我编写“项目A”时,某些“项目D”会自动构建。
Project A > Project B > Project C > Project D
where > means Project B depends on Project A
«项目D»pom snipeet是:
<project xmlns="...">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myProduct</groupId>
<artifactId>build-MyProjectD</artifactId>
<name>MyProjectD</name>
........
</project>
正在构建«Project A»自动构建«Project B»,根据我的理解,在某个地方build-MyProjectD
应该将Project A > Project B > Project C
作为依赖项添加到其中一个项目中build-MyProjectD
,但我没有找到这些项目的poms下的字符串artifactId
的任何引用。
任何想法如何在上游项目中没有孩子{{1}}的情况下,如何构建子模块(在本例中为“Project D”)?
答案 0 :(得分:17)
您需要创建聚合器项目。请参阅the link for more information on the aggregation concept。
基本上,您创建一个包含多个“模块”的父项目。构建父级时,模块也会自动构建。
如果您声明模块之间的依赖关系,Maven将按正确的顺序自动构建不同的模块,这样如果«Project A»依赖于«Project B»,首先构建«Project B»,然后«Project A»是构建,以便其工件可用于构建第二个工件。
答案 1 :(得分:10)
对于父项目,Maven将在构建父项目时构建所有子模块。
将模块添加到父pom。假设A
是您的父项目
<modules>
<module>projectB</module>
<module>projectC</module>
<module>projectD</module>
</modules>
并在模块(B,C和D)中,将项目A添加为父项(这是可选的,谢谢@Guillaume Polet)
<parent>
<groupId>foo.bar</groupId>
<artifactId>ProjectA</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
因此,如果您构建projectA,它将构建ProjectB,ProjectC和ProjectD。此外,maven足够聪明,可以找出B,C和D的正确构建顺序。