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

sco*_*les 9 java pom.xml maven

我的项目中有多个模块,它们直接或可传递地相互依赖.当我编写"项目A"时,某些"项目D"会自动构建.

Project A > Project B  > Project C > Project D

where > means Project B depends on Project A
Run Code Online (Sandbox Code Playgroud)

«Project D»pom snipeet是:

<project xmlns="...">
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.myProduct</groupId>
    <artifactId>build-MyProjectD</artifactId>
    <name>MyProjectD</name>
    ........
</project>
Run Code Online (Sandbox Code Playgroud)

随着构建«Project A»自动构建«Project B»,根据我的理解,在某个地方发生这种情况build-MyProjectD应该作为依赖项添加到其中一个项目中,Project A > Project B > Project C但我没有build-MyProjectD在这些项目的poms下找到任何字符串的引用.

知道如何artifactId在上游项目中没有孩子存在的情况下,如何构建子模块(在本例中为"Project D")?

Gui*_*let 17

您需要创建聚合器项目.有关聚合概念的更多信息,请参阅链接.

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

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

另请参阅Maven常见问题解答中的这个问题.


xyz*_*xyz 10

对于父项目,Maven将在构建父项目时构建所有子模块.将模块添加到父pom.假设A是你的父项目

  <modules>
    <module>projectB</module>
    <module>projectC</module>
    <module>projectD</module>
  </modules>
Run Code Online (Sandbox Code Playgroud)

在模块(B,C和D)中,将项目A添加为父项(这是可选的,谢谢@Guillaume Polet)

 <parent>
   <groupId>foo.bar</groupId>
   <artifactId>ProjectA</artifactId>
   <version>1.0-SNAPSHOT</version>
 </parent>
Run Code Online (Sandbox Code Playgroud)

因此,如果您构建projectA,它将构建ProjectB,ProjectC和ProjectD.此外,maven足够聪明,可以找出B,C和D的正确构建顺序.

  • 第二步不是必需的(它被称为继承).父pom中只需要声明模块. (4认同)