Maven build跳过在另一个模块中依赖的子模块

Maven build跳过在另一个模块中依赖的子模块,maven,build,multi-module,maven-module,Maven,Build,Multi Module,Maven Module,我有如下嵌套的多模块maven结构: main_aggregator |- submodule_A | |- sub_submodule_1 | |- sub_submodule_2 |- submodule_B |- submodule_C <parent> <groupId>my.project</groupId> <artifactId>main-parent</artifactId> <ver

我有如下嵌套的多模块maven结构:

main_aggregator
|- submodule_A
|  |- sub_submodule_1
|  |- sub_submodule_2
|- submodule_B
|- submodule_C
<parent>
    <groupId>my.project</groupId>
    <artifactId>main-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>
<parent>
    <groupId>my.project</groupId>
    <artifactId>specific-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>
主聚合器中的pom.xml在模块中具有此功能

<modules>
    <module>submodule_A</module>
    <module>submodule_B</module>
    <module>submodule_C</module>
</modules>
<modules>
    <module>sub_submodule_1</module>
    <module>sub_submodule_2</module>
</modules>

子模块_A
子模块
子模_C
子模块_A中的pom.xml在模块中具有此功能

<modules>
    <module>submodule_A</module>
    <module>submodule_B</module>
    <module>submodule_C</module>
</modules>
<modules>
    <module>sub_submodule_1</module>
    <module>sub_submodule_2</module>
</modules>

子模块子模块1
子模块2
主聚合器子模块的父模块如下所示:

main_aggregator
|- submodule_A
|  |- sub_submodule_1
|  |- sub_submodule_2
|- submodule_B
|- submodule_C
<parent>
    <groupId>my.project</groupId>
    <artifactId>main-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>
<parent>
    <groupId>my.project</groupId>
    <artifactId>specific-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>

我的项目
主要父母
0.0.1
子模块_A的子模块的父模块如下所示:

main_aggregator
|- submodule_A
|  |- sub_submodule_1
|  |- sub_submodule_2
|- submodule_B
|- submodule_C
<parent>
    <groupId>my.project</groupId>
    <artifactId>main-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>
<parent>
    <groupId>my.project</groupId>
    <artifactId>specific-parent</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>

我的项目
特定父代
0.0.1
重要的是,子模块B依赖于子模块1和子模块2

当我从main_聚合器运行build时,它失败了,并说它无法解决子模块_B-子模块_1和子模块_2的依赖关系

在反应堆概要中,我看到,子模块A首先构建,构建成功,但它的子模块—子模块1和子模块2被跳过。所以我理解,为什么它在缺少依赖项时失败,但我不理解的是为什么maven没有首先构建这些依赖项。我也不明白为什么子模块的构建被标记为成功,而它的子模块甚至没有构建

Maven版本是3.5.2

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

更新2:
单线程运行只是部分成功。看我的答案…

所以我发现了问题所在。问题是某种“复制粘贴异常”。在子模块A(聚合器)中,我从主聚合器复制了pom。当然,我改变了主要的东西,比如组id和工件id,但我没有改变插件

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

问题是,显然在并行构建期间,聚合器项目的构建“无序”,因为它没有依赖项(子模块在其子模块被构建之前启动构建)。现在javadoc聚合开始发挥作用

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

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

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


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

在多模块构建中,
唯一有意义的位置是您称为聚合器的根。在任何其他模块中,
都是错误的…尝试过了,没有帮助您可以在Github上做一个示例,这样我们就可以真正讨论我们可以在每一方面尝试的东西…顺便问一下:您在每个子/父模块中都使用了相同的版本,如
1.0.0-SNAPSHOT
?控制台上显示了什么
mvn clean