Maven 构建跳过依赖于另一个模块的子模块

Maven build skips submodules which are dependency in another module

我有这样的嵌套多模块 maven 结构:

main_aggregator
|- submodule_A
|  |- sub_submodule_1
|  |- sub_submodule_2
|- submodule_B
|- submodule_C

pom.xml in main_aggregator 在模块

中有这个
<modules>
    <module>submodule_A</module>
    <module>submodule_B</module>
    <module>submodule_C</module>
</modules>

pom.xml in submodule_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>

submodule_A 子模块的父级是这样的:

<parent>
    <groupId>my.project</groupId>
    <artifactId>specific-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>

重要的是 submodule_B 依赖于 sub_submodule_1 和 sub_submodule_2

当我 运行 从 main_aggregator 构建时,它失败并说它无法解决 submodule_B - sub_submodule_1 和 sub_submodule_2 的依赖关系。

我在反应器摘要中看到,submodule_A 首先构建并且构建成功,但它是子模块 - sub_submodule_1 和 sub_submodule2 被跳过。所以我明白,为什么它会因缺少依赖项而失败,但我不明白的是为什么 Maven 没有首先构建这些依赖项。此外,我不明白为什么 submodule_A 的构建在其子模块尚未构建时被标记为成功。

Maven 版本为 3.5.2.

更新: 当我运行在一个线程中构建时,没有问题。只有在进行并行构建时才会出现问题。

更新2: 运行 在单线程中仅部分成功。看我的回答...

所以我发现了问题所在。问题是某种 "copy paste exception"。在聚合器 submodule_A 中,我从 main_aggregator 复制了 pom。当然我主要改了group id和artifact id,但是我没有改插件。

导致该问题的插件是 javadoc。特别是它的总体目标。当我删除它时,我可以构建整个项目(但不是并行的)。

问题是,显然在并行构建期间,聚合器项目正在构建 "out of order" 因为它没有依赖项(submodule_A 在构建子模块之前开始构建)。现在 javadoc 聚合开始发挥作用。

Javadoc 聚合分叉每个子模块构建(也许这是错误的术语)。但这不是按依赖项排序的,所以它失败了。

并行构建仍然存在问题,因为 main_aggregator 中 javadoc 的聚合目标会导致同样的问题。但这是另一个问题。

我从中又学到了一个教训。如果我将每个模块的全部 pom.xml 内容放入我的问题中,有人可能会看到问题。

因此,当您提出问题时,即使您认为细节无关紧要,也不要隐藏细节:)...