构建Maven多模块项目的顺序?

Zha*_* Yi 51 java build maven multi-module

情况是,我有两个具有相同结构的Maven多模块项目:

Parent
    - Module 1
    - Module 2

当我构建项目1时,我看到父项是首先构建的(顺序是parent-> module1-> module2).但是对于项目2,父项是最后构建的(顺序是module1-> module2-> parent).为什么这两个项目有不同的构建订单?此外,如何手动控制构建顺序?

更新1:
两个父项目都是没有源代码的简单POM项目,因此我无法根据依赖关系图解释构建顺序.

更新2:
除了GAV和子模块名称之外,父POM是相同的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>parent-group-id</groupId>
    <artifactId>parent-artifact-id</artifactId>
    <version>parent-version</version>
    <packaging>pom</packaging>
    <name>parent-name</name>
    <modules>
        <module>module-1</module>
        <module>module-2</module>
    </modules>
</project>

Kai*_*nad 39

构建顺序由Maven反应器确定,该反应器是一种通过对项目进行排序来自动确保多模块构建的正确构建顺序的机制.

请参阅官方文档了解其工作原理.

它说:

排序项目时遵循以下关系:

  • 项目依赖于构建中的另一个模块
  • 插件声明,其中插件是构建中的另一个模块
  • 插件依赖于构建中的另一个模块
  • 构建中另一个模块的构建扩展声明
  • 元素中声明的顺序(如果没有其他规则适用)

您无法手动控制构建顺序.如果要更改订单,则必须对项目进行更改,以影响反应堆排序顺序.

  • 但这并不能解释为什么两个项目的构建顺序不同。 (2认同)

Wil*_*ler 11

在较高级别,构建顺序基于模块依赖关系图的拓扑排序.

编辑:问题给你.我理解项目1包含两个模块,项目2也是如此.但是项目2中的模块是否明确地将"父"pom声明为父项?我想也许你的项目1模块明确地声明了父pom,而项目2模块则没有.这意味着项目2"父"根本不是父母,因此不必在模块之前构建.无论如何,这是我的猜测.


Yiğ*_*man 8

我最近在 CentOS 7 上遇到了这个问题。我将 Maven 从 3.0.5 更新到 3.5.3,问题已经解决。如果有人也有这个问题,你可以先尝试这样做。

  • 我是为像我这样的人写的。我有这个问题,找不到任何东西。然后我自己解决了并将它写到这里,所以如果人们解决这个问题并谷歌它他们可以找到一些东西。 (4认同)