情况是,我有两个具有相同结构的Maven多模块项目:
Parent
- Module 1
- Module 2
当我构建项目1时,我看到父项是先构建的(命令是 parent->module1->module2 ) . 但是对于项目2,父项是最后构建的(顺序是 module1->module2->parent ) . 为什么这两个项目有不同的构建订单?此外,如何手动控制构建顺序?
Update 1:
两个父项目都是没有源代码的简单POM项目,因此我无法根据依赖关系图解释构建顺序 .
Update 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>
3 回答
在较高级别,构建顺序基于模块依赖关系图的topological sort .
EDIT: 给您问题 . 我理解项目1包含两个模块,项目2也是如此 . 但是项目2中的模块是否明确地将"parent" pom声明为父项?我'm thinking that perhaps your project 1 modules explicitly declare the parent pom, and the project 2 modules don' t . 这意味着必须在模块之前构建项目2 "parent" isn 't really a parent at all and therefore doesn't . 无论如何,这是我的猜测 .
构建顺序由Maven reactor确定,Maven reactor是一种通过对项目进行排序来自动确保多模块构建的正确构建顺序的机制 .
有关其工作原理,请参阅the official documentation .
它说:
您无法手动控制构建顺序 . 如果要更改订单,则必须对项目进行更改,以影响反应堆排序顺序 .
我最近和Centos 7一直生活在这个问题上 . 我从3.0.5将maven更新到3.5.3并且这个问题已经解决了 . 如果有人有此问题,请先尝试 .