4

我有一个项目,我所有的项目都有一个父 pom,定义如下:

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

但是,这个父 pom 没有在 modules 元素中指定模块。

因此,当我运行mvn install -f parent/pom.xml命令时,它什么也不做。

有没有其他方法可以按顺序构建整个项目,以便构建所有的 pom?

“按顺序”是指“按依赖顺序构建”。因为几个项目依赖于其他项目,我们不能只按字母顺序构建每个项目。

4

2 回答 2

13

如果你有一个reactor pom(一个带有<modules>元素的 pom,<packaging>定义为pom),那么模块将按依赖顺序构建。无论模块在 pom.xml 中指定的顺序如何,都会发生这种排序。

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

选项1

你的 reactor 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'

在这种情况下,reactor pom 包含:

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

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

选项 2

将你的父 pom 向上移动一个目录,并将它用作父 pom 和反应器 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 本身最常用的模式,我尽量避免偏离被广泛理解和测试的“人迹罕至的路径”太远。

有关详细信息,请参阅使用多个模块的指南

于 2012-11-14T17:45:30.537 回答
1

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

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

    <modules>
      <module>Proj A to Build/module>
      <module>Proj B dependent or Proj A</module>
    </modules>
于 2012-11-14T17:07:38.343 回答