Maven按顺序构建

时间:2012-11-14 16:47:20

标签: maven parent

我有一个项目,我的所有项目都有一个像这样定义的父pom:

<parent>
    <groupId>MyProject</groupId>
    <artifactId>MyApp</artifactId>
    <version>1.0</version>
</parent>

但是,此父pom不指定modules元素中的模块。

因此,当我运行mvn install -f parent/pom.xml命令时,它不会执行任何操作。

是否有其他方法可以构建整个项目 In Order 以便构建所有poms?

“按顺序”我的意思是“建立依赖顺序”。因为有几个项目依赖于其他项目,所以我们不能按字母顺序构建每个项目。

2 个答案:

答案 0 :(得分:13)

如果您有 reactor pom (带有<modules>元素的pom,<packaging>定义为pom),则模块将依赖于构建订购。无论在pom中指定模块的顺序如何,都会发生这种排序。

有几种方法可以解决这个问题:

选项1

您的反应堆pom不需要与您的父pom相同的pom。所以你可以:

project/pom.xml          # Reactor pom with <modules> element
project/parent/pom.xml   # Parent pom
project/module-a/pom.xml # Some module 'a'
project/module-b/pom.xml # Some module 'b'

在这种情况下,反应堆pom包含:

<modules>
  <module>parent</module>
  <module>module-a</module>
  <module>module-b</module>
</modules>

在顶层运行mvn install将构建您的父pom,以及依赖顺序的两个模块。

选项2

将您的父pom移动到目录中,并将其用作父pom和reactor pom,因此您的项目看起来像这样

project/pom.xml          # Parent/Reactor pom with <modules> element
project/module-a/pom.xml # Some module 'a'
project/module-b/pom.xml # Some module 'b'

其中的模块部分看起来像这样

<modules>
  <module>module-a</module>
  <module>module-b</module>
</modules>

同样,在顶层运行mvn install将构建您的父pom,以及依赖顺序的两个模块。

选项3

将您的父pom留在原处,然后添加模块部分:

<modules>
  <module>../module-a</module>
  <module>../module-b</module>
</modules>

在这种情况下,运行mvn install -f parent / pom.xml将构建父pom,并按依赖顺序构建两个模块。

<强>结论

我通常使用选项2.这是maven本身最常用的模式,我尽量避免偏离“被打败的路径”太远,这是广泛理解和测试的。

有关详细信息,请参阅Guide to Working with Multiple Modules

答案 1 :(得分:1)

在构建期间,没有其他方法可以自动解决项目之间的依赖关系。

解决依赖关系的方法是指定构建需要完成的顺序。在父POM上创建一个模块部分来执行此操作。

    <modules>
      <module>Proj A to Build/module>
      <module>Proj B dependent or Proj A</module>
    </modules>