Maven在其他模块之前构建父模块

Maven在其他模块之前构建父模块,maven,maven-plugin,maven-profiles,Maven,Maven Plugin,Maven Profiles,我有一个maven项目,其结构如下 parent -pom.xml -module1 -pom.xml -module2 -pom.xml - project A - pom.xml (type pom, has <modules><module>B</module><module>C</module></modules>) - project B - pom.xml (has

我有一个maven项目,其结构如下

parent
  -pom.xml
  -module1
     -pom.xml
  -module2
     -pom.xml
- project A 
 - pom.xml (type pom, has <modules><module>B</module><module>C</module></modules>)
 - project B
   - pom.xml (has parent A)
 - project C
   - pom.xml (no parent)

在parent中,我有一个配置文件,其中包含了所有子模块递归执行的插件。但是当我构建项目时,我发现子模块是先构建的,最后是父模块。但我希望相反的事情发生。我希望插件首先为父模块执行,然后为子模块执行。因为只有在父模块中执行插件时,才会生成子模块要使用的文件。因此,如果先构建子模块,则会跳过插件执行,因为缺少文件。

在Maven中,一个经常被误解的概念是
父模块
聚合器
之间的差异。让我们再了解一下。实际上,同一个项目通常同时扮演
parent
aggregator
的角色,我认为这也是您的情况

如果是这样的话,您不能期望聚合器“首先执行”,因为它的整个“执行”基本上就是执行子模块

在您的情况下,将
父项
聚合器
分开可能会有所帮助。所以你会有这样一个结构:

aggregator
  - pom.xml (where you have <modules>...<modules>)
  - parent
     -pom.xml (no parent)
  - module1
     -pom.xml (parent is `parent` and not `aggregator`)
  - module2
     -pom.xml (parent is `parent` and not `aggregator`)
A
上运行
mvn
时的结果是:

[INFO] Reactor Build Order:
[INFO]
[INFO] C
[INFO] A
[INFO] B
如果模块指定了一个父级(即使父级是反应器),则父级将在模块之前处理。根据注释中的说明(您的模块目前没有父级),最简单的修复方法可能是将
reactor
添加为
parent


然而,这可能会导致其他问题,上述“需要记住的事情”仍然有效

我发现Windows环境或Linux环境中的exec序列不同。以下结构

parent
  -pom.xml
  -module1
     -pom.xml
  -module2
     -pom.xml
- project A 
 - pom.xml (type pom, has <modules><module>B</module><module>C</module></modules>)
 - project B
   - pom.xml (has parent A)
 - project C
   - pom.xml (no parent)
-项目A
-xml(类型pom,has BC)
-项目B
-pom.xml(具有父级A)
-项目C
-pom.xml(无父项)
在Windows中按顺序C、A、B执行, 但在Linux中是序列B、C、A。
事实上,我不在乎C是什么时候打包的,但问题是A和B的顺序不同。当我在Linux中使用插件“Flatte maven plugin”时,它不会替换项目B中的属性${revision},因为它是在项目A中定义的,而A是最后生成的。因此,当B尝试解析其输出“a-${revision}.pom”的父级时,它将失败。

请显示日志文件,因为父级是在开始时生成的第一个日志文件…顺便问一下:您是否在普通命令行上进行测试?你使用哪个Maven版本?JDK版本?JDK 1.8和mvn 3.6.1根据您所说的,我提到的父模块只是一个聚合器。它没有自己的src代码。因此,我无法使用上述解决方案。我想先构建聚合器,然后构建子对象
aggregator-pom.xml(您有…)-module1-pom.xml(无父项而非聚合器)-module2-pom.xml(无父项而非聚合器)
@DevikaSudheer我更新了答案。我希望这有帮助。