Сборка Maven пропускает подмодули, которые зависят от другого модуля

У меня есть вложенная многомодульная структура maven, подобная этой:

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

pom.xml в main_aggregator имеет это в модулях

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

pom.xml в 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.

Обновление: когда я запускаю сборку в одном потоке, проблем нет. Проблема возникает только при параллельной сборке.

Update2: запуск в одном потоке был лишь частичным успехом. Смотрите мой ответ...


person CoCumis    schedule 23.11.2017    source источник
comment
В сборке с несколькими модулями единственное место, где <relativePath/> имеет смысл, — это корень, который вы назвали агрегатором. В любом другом модуле <relativePath/> просто неверен...   -  person khmarbaise    schedule 23.11.2017
comment
Пробовал, не помогло   -  person CoCumis    schedule 23.11.2017
comment
Можете ли вы сделать пример на Github, чтобы мы действительно могли обсудить что-то, что мы можем попробовать с каждой стороны...   -  person khmarbaise    schedule 24.11.2017
comment
Кстати: вы используете в каждом дочернем/родительском экземпляре одну и ту же версию, например 1.0.0-SNAPSHOT? Что показывает mvn clean на консоли?   -  person khmarbaise    schedule 24.11.2017


Ответы (1)


Так я узнал, в чем была проблема. Проблема заключалась в каком-то «исключении для копирования». В submodule_A, который является агрегатором, я скопировал pom из main_aggregator. Конечно, я изменил основные вещи, такие как идентификатор группы и идентификатор артефакта, но я не менял плагины.

Плагин, который вызвал эти проблемы, был javadoc. В частности, это совокупная цель. Когда я его удалил, я смог собрать весь проект (но не параллельно).

Проблема заключалась в том, что, очевидно, при параллельной сборке проекты агрегаторов собираются "не по порядку", потому что у него нет зависимостей (submodule_A начинает сборку до того, как будут собраны его подмодули). Теперь в игру вступает агрегат javadoc.

Совокупность Javadoc разветвляла каждую сборку подмодуля (возможно, это неправильная терминология). Но это не было упорядочено зависимостями, поэтому оно не работает.

По-прежнему существует проблема с параллельными сборками, поскольку совокупная цель javadoc в main_aggregator вызывает ту же проблему. Но это к другому вопросу.

Есть еще один урок, который я извлек из этого. Если бы я поместил в свой вопрос содержимое всего pom.xml каждого модуля, кто-то, вероятно, увидел бы проблему.

Поэтому, когда вы что-то спрашиваете, не скрывайте подробности, даже если вам кажется, что они не имеют значения :)...

person CoCumis    schedule 27.11.2017