Maven按顺序构建



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

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

但是,这个父pom并没有指定module元素中的module。

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

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

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

如果您有一个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和反应器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本身最常用的模式,我尽量避免偏离"人迹罕至的道路",这一点得到了广泛的理解和测试。

有关更多信息,请参阅《使用多个模块指南》。

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

解决依赖关系的方法是指定需要执行构建的顺序。在你的父POM上创建一个模块部分来做到这一点。

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

最新更新