Дженкинсу не удается собрать многомодульный проект Maven

У меня есть многомодульный проект Maven, в котором у меня есть несколько микросервисов в виде модулей, поэтому у меня есть модули, перечисленные в моем родительском pom.xml, как показано ниже:

<modules>
    <module>core</module>
    <module>model-base</module>
    <module>module1</module>
    <module>module2</module>
    ...
    <module>module5</module>
    <module>module7</module>
    <module>module6</module>
</modules>

Здесь module7 зависит от module5, 6, поэтому у меня есть зависимости, перечисленные ниже, в моем module7 pom.xml:

<parent>
    <artifactId>pojectA</artifactId>
    <groupId>com.domain</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module7</artifactId>
<dependencies>
    <dependency>
        <groupId>com.domain</groupId>
        <artifactId>core</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.domain</groupId>
        <artifactId>module5</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.domain</groupId>
        <artifactId>module6</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies> 

Когда я запускаю mvn clean package в моем локальном компьютере, module5, 6 вызывается перед module7, как и ожидалось, но в Jenkins он пытается построить module 5, а затем module7 делает сборку неудачной, говоря:

[ERROR] Failed to execute goal on project module7: Could not resolve dependencies for project module7:jar:1.0-SNAPSHOT: Could not find artifact module6:jar:1.0-SNAPSHOT -> [Help 1]

Нужно ли мне запускать какие-либо другие задания или переупорядочивать модули в моем pom.xml, чем он отличается от локального до Jenkins? Ценим любую помощь в этом.


person user1653027    schedule 27.06.2016    source источник
comment
Вы уверены, что Jenkins действительно строит так же, как вы строите локально? Это единственная ошибка в выводе консоли сборки? Можете ли вы предоставить части Порядок сборки Reactor и Сводка Reactor из выходных данных консоли?   -  person Gerold Broser    schedule 28.06.2016
comment
Вы видели, что реактор находится в соответствии с вашими зависимостями? Потому что модуль5, модуль6 должны быть собраны до модуля7?   -  person khmarbaise    schedule 28.06.2016


Ответы (3)


Как вы, вероятно, хорошо понимаете, проблема заключается в том, что зависимости между дочерними модулями не работают, потому что они еще не установлены в локальном репозитории (поскольку их еще предстоит построить). Целью, которая вызывает это (во всяком случае, для меня), является mvn test, которая вызывается mvn package. Ваша локальная сборка, вероятно, работает, потому что в какой-то момент вы сделали mvn install, и это загрузило вашу систему.

В Jenkins я нашел единственный способ заставить эти сборки работать — использовать шаг предварительной сборки, вызывающий цель установки Maven, а затем построить основной шаг, как обычно.

Конфигурация Дженкинса

person Nigel    schedule 26.04.2017

Порядок модулей не имеет значения. Maven распознает, какой проект зависит от какого другого проекта (проектов), и соответствующим образом устанавливает порядок сборки в реакторе. См. справочник POM, агрегирование (или мультимодуль):

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

person Gerold Broser    schedule 28.06.2016
comment
спасибо за ответ ... я понял, что порядок модулей в pom не имеет значения для мультимодуля maven. Поэтому, когда мы запускаем mvn clean package в Jenkins или локально, порядок должен быть таким же, как моя локальная сборка. Но почему моя локальная сборка имеет успех, а jenkins терпит неудачу? Есть идеи? - person user1653027; 28.06.2016

Добавьте предварительный шаг, как показано на скриншоте ниже. Это скомпилирует все ваши лучшие модули. Затем мы можем выполнить любой модуль, который захотим.

ScreenShotLink

person Vinod Kumar    schedule 05.03.2021