如何使用父模块制作子模块的maven构建?

时间:2014-12-29 13:00:37

标签: java maven pom.xml

我的项目中有多个模块,它们直接或传递地相互依赖。 当我编写“项目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”)?

2 个答案:

答案 0 :(得分:17)

您需要创建聚合器项目。请参阅the link for more information on the aggregation concept

基本上,您创建一个包含多个“模块”的父项目。构建父级时,模块也会自动构建。

如果您声明模块之间的依赖关系,Maven将按正确的顺序自动构建不同的模块,这样如果«Project A»依赖于«Project B»,首先构建«Project B»,然后«Project A»是构建,以便其工件可用于构建第二个工件。

另见this question from the Maven's FAQ

答案 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的正确构建顺序。