Подтвердить что ты не робот

Строить порядок мультимодульного проекта 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>
4b9b3361

Ответ 1

Порядок сборки определяется реактором Maven, который является механизмом, который автоматически обеспечивает правильный порядок сборки для многомодульных построений путем сортировки проектов.

См. официальную документацию о том, как она работает.

В нем говорится:

При сортировке проектов соблюдаются следующие отношения:

  • зависимость проекта от другого модуля в сборке
  • объявление плагина, где плагин - это еще один модуль в сборке
  • зависимость плагина от другого модуля в сборке
  • объявление расширения сборки на другом модуле в сборке
  • порядок, объявленный в элементе (если не применяется другое правило)

Вы не можете вручную управлять порядком сборки. Если вы хотите изменить заказ, вы должны внести изменения в свой проект, которые влияют на порядок сортировки реактора.

Ответ 2

На высоком уровне порядок сборки основан на топологической сортировке графа зависимости модуля.

EDIT: Вопрос для вас. Я понимаю, что проект 1 содержит два модуля, а также проект 2. Но модули в проекте 2 явно объявляют "родительский" pom в качестве родителя? Я думаю, что, возможно, ваши модули проекта 1 явно объявляют родительский pom, а модули проекта 2 - нет. Это означало бы, что проект 2 "родительский" на самом деле не является родителем и поэтому не должен быть создан перед модулями. Это мое предположение в любом случае.