Строить порядок мультимодульного проекта Maven?
Ситуация в том, что у меня есть два мультимодуля Maven с одинаковой структурой:
Parent
- Module 1
- Module 2
Когда я создаю проект 1, я вижу, что родительский объект построен сначала (порядок parent- > module1- > module2). Однако для проекта 2 родительский элемент построен наконец (порядок module1- > module2- > parent). Почему у двух проектов разные заказы на сборку? Кроме того, как я могу вручную управлять порядком сборки?
Обновление 1:
Оба родительских проекта представляют собой простые проекты POM без исходного кода, поэтому я не могу объяснить порядок сборки согласно графику зависимости.
Обновление 2:
Родительские POM-те же, за исключением имен GAV и дочерних модулей:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>parent-group-id</groupId>
<artifactId>parent-artifact-id</artifactId>
<version>parent-version</version>
<packaging>pom</packaging>
<name>parent-name</name>
<modules>
<module>module-1</module>
<module>module-2</module>
</modules>
</project>
Ответы
Ответ 1
Порядок сборки определяется реактором Maven, который является механизмом, который автоматически обеспечивает правильный порядок сборки для многомодульных построений путем сортировки проектов.
См. официальную документацию о том, как она работает.
В нем говорится:
При сортировке проектов соблюдаются следующие отношения:
- зависимость проекта от другого модуля в сборке
- объявление плагина, где плагин - это еще один модуль в сборке
- зависимость плагина от другого модуля в сборке
- объявление расширения сборки на другом модуле в сборке
- порядок, объявленный в элементе (если не применяется другое правило)
Вы не можете вручную управлять порядком сборки. Если вы хотите изменить заказ, вы должны внести изменения в свой проект, которые влияют на порядок сортировки реактора.
Ответ 2
На высоком уровне порядок сборки основан на топологической сортировке графа зависимости модуля.
EDIT: Вопрос для вас. Я понимаю, что проект 1 содержит два модуля, а также проект 2. Но модули в проекте 2 явно объявляют "родительский" pom в качестве родителя? Я думаю, что, возможно, ваши модули проекта 1 явно объявляют родительский pom, а модули проекта 2 - нет. Это означало бы, что проект 2 "родительский" на самом деле не является родителем и поэтому не должен быть создан перед модулями. Это мое предположение в любом случае.