Дженкинс и мавен мультимодуль Проекты пропавших артефактов - PullRequest
1 голос
/ 29 января 2012

Это упрощенный пример проекта ear, родительский pom объединяет EAR, EJB и jars.

У меня есть эта структура в проекте Maven, хранящаяся в SVN:

parent/
|- pom.xml
|- modulA/
|  |- pom.xml
|- modulB/
|  |- pom.xml

modulB имеет Зависимость от modulA

Pom.xml имеет секцию модулей

<modules>
  <module>modulA</module>
  <module>modulB</module>
</modules>

И секцию управления зависимостями

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>modulA</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>group</groupId>
            <artifactId>modulB</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Подпрограмма-модули ссылаются на родительский

<parent>
    <groupId>group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <relativePath>..</relativePath>
</parent>

на моем ПК, когда я впервые компилирую с maven 2.2.1 (windows)

mvn clean compile

У меня нет проблем

но .... когда Дженкинс пытается скомпилироваться впервые (Maven 2.2.1 Linux RedHat)

Missing:
----------
 1) modulA:jar:0.0.2-SNAPSHOT

   Try downloading the file manually from the project website.

   Then, install it using the command: 
      mvn install:install-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2-   SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file

   Alternatively, if you host your own repository you can deploy the file there: 
      mvn deploy:deploy-file -DgroupId=group -DartifactId=modulA -Dversion=0.0.2-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

   Path to dependency: 
      1) modulB:ejb:0.0.2-SNAPSHOT
 2) modulA:jar:0.0.2-SNAPSHOT


   ----------
   1 required artifacts are missing.

Почему ????????

Послечто если я разверну проект с моего компьютера в Artifactory, у Jenkins не возникнет проблем, потому что Jenkins загружает артефакт из хранилища ... но почему Jenkins зависит от артефактов в хранилище? *

:(

Заранее спасибо

РЕДАКТИРОВАТЬ:

Я думал, что зависимостьManagemeРаздел nt только «определяет» зависимости, но если подмодуль не использует зависимость, зависимость не добавляется в подмодуль.Я отбрасываю раздел dependencyManagement, и проблема в Jenkins по-прежнему возникает.

Он работает на моем компьютере без проблем.

Ответы [ 2 ]

0 голосов
/ 23 января 2014

При первом создании родительского проекта в хранилище maven вашего пользователя Jenkins не будет установлен модуль modulA.clean compile затем успешно выполняется в модуле, но ничего не установлено.Когда он запускается в modulB, зависимость от modulA не может быть разрешена.

Если целью вашего задания Jenkins было clean install вместо clean compile, то артефакты modulA будут установлены в хранилище пользователя Jenkins доначинается сборка modulB, и все будет работать.

Предположительно, это сработало на вашей собственной машине, потому что либо вы хотя бы раз запустили mvn install в modulA, либо потому, что путь к классам в вашей среде IDE решил проблему для вас.

0 голосов
/ 29 января 2012

Надеюсь, выше раздел управления зависимостями находится внутри родительского pom. В соответствии с вашими требованиями модуль modulB имеет зависимость от modulA. Поэтому я предлагаю вам включить зависимость в moduleB вместо того, чтобы иметь ее в родительском pom. Я думаю, что когда он запускается в первый раз, maven ищет обе зависимости, так как вы упомянули в родительском pom. Посмотрите порядок сборки вашего проекта. Сначала он собирает модуль A, а затем B. В вашем случае я надеюсь, что вы включили все другие зависимости в pom-файл moduleA, и после его создания он развернет файл jar в репозитории m2. И тогда moduleB начинает собираться, и поскольку ваша зависимость уже находится в репозитории m2, она не будет кричать, и проект будет успешно построен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...