Дженкинс не может построить многомодульный проект 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 поэтому у меня есть зависимости, перечисленные ниже в моем module7pom.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 как и ожидалось, но в Дженкинс пытается построить 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чем он отличается от местного к Дженкинсу? Ценю любую помощь по этому вопросу.

3 ответа

Решение

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

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

Дженкинс конфиг

Порядок модулей не актуален. Maven распознает, какой проект зависит от других проектов, и соответственно устанавливает порядок сборки в реакторе. См. POM Reference, Aggregation (или Multi-Module):

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

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

Другие вопросы по тегам