我已经嵌套了多模块Maven结构:
main_aggregator
|- submodule_A
| |- sub_submodule_1
| |- sub_submodule_2
|- submodule_B
|- submodule_C
main_aggregator中的pom.xml在模块中具有此功能
<modules>
<module>submodule_A</module>
<module>submodule_B</module>
<module>submodule_C</module>
</modules>
pom.xml在subsodule_a中具有模块
<modules>
<module>sub_submodule_1</module>
<module>sub_submodule_2</module>
</modules>
main_aggregator的子模块的父母是这样的:
<parent>
<groupId>my.project</groupId>
<artifactId>main-parent</artifactId>
<version>0.0.1</version>
<relativePath/>
</parent>
subsodule_a的子模块的父母是这样的:
<parent>
<groupId>my.project</groupId>
<artifactId>specific-parent</artifactId>
<version>0.0.1</version>
<relativePath/>
</parent>
重要的是 subsodule_b对sub_submodule_1和sub_submodule_2
具有依赖关系。当我从main_aggregator构建时,它会失败,并表示无法解决subsodule_b -sub_submodule_1和sub_submodule_2。
在反应堆摘要中,我看到,subsodule_a是首先构建的,并构建了成功,但是它是sub_submodule_1和sub_submodule2。因此,我理解,为什么它因缺失依赖性而失败,但是我不明白的是为什么Maven没有先构建这些依赖项。另外,我不明白为什么在没有构建子模块时,subsodule_a的构建被标记为成功。
Maven版本为3.5.2。
更新:当我在一个线程中运行构建时,没有问题。问题仅在进行并行构建时发生。
update2:在单线线程中运行只是部分成功。请参阅我的答案...
,所以我发现了问题所在。这个问题是某种"复制糊剂异常"。在一个聚合器的subsodule_a中,我从main_aggregator复制了POM。当然,我更改了诸如组ID和Artifact ID之类的主要内容,但我没有更改插件。
引起问题的插件是Javadoc。特别是它的目标。当我删除它时,我可以构建整个项目(但不能并行)。
问题是,显然在平行构建过程中,集合项目"构建"是"秩序",因为它没有依赖关系(subpodule_a启动构建在构建子模型之前)。现在javadoc汇总开始玩。
javadoc聚合分配了每个子模块构建(也许这是错误的术语)。但这不是由依赖项订购的,因此失败了。
并行构建仍然存在问题,因为javadoc在main_aggregator中的汇总目标会导致相同的问题。但这是另一个问题。
我还从中学到了一堂课。如果我将每个模块的整个pom.xml的内容都放在我的问题中,那么有人可能会看到问题。
所以当您问某事时,即使您认为它们无关紧要,也不要隐藏细节:)...