2016-04-20 4 views
0

У меня есть проект Java, посвященный GitHub. Проект состоит из 3 модулей. Я сконфигурировал плагин Jenkins Workflow Multibranch Pipeline для создания трех модулей.Maven build не работает ТОЛЬКО при запуске с jenkins

node { 
    // Mark the code checkout 'stage'.... 
    // stage 'Checkout' 

    // Get some code from a GitHub repository 
    git url: '[email protected]:me/myproject.git', credentialsId: '###' 

    // Get the maven tool. 
    // ** NOTE: This 'M3' maven tool must be configured 
    // **  in the global configuration. 
    def mvnHome = tool 'M3' 

    stage 'Build module 1' 
    sh "${mvnHome}/bin/mvn -f module-1/ clean install" 

    stage 'Build module 2' 
    sh "${mvnHome}/bin/mvn -f module-2/ clean install" 

    stage 'Build module 3' 
    sh "${mvnHome}/bin/mvn -f module-3/ clean install" 
} 

Maven строит первые 2 модуля без проблем. Но на третьем модуле я получаю следующее сообщение об ошибке:

Compilation failure 
/var/lib/jenkins/workspace/.../MyClass.java:[136,44] cannot find symbol 
    symbol: method setStore(java.util.UUID,java.util.UUID,java.util.Date,int) 
    location: variable _storeService of type com.my.module3.interfaces.StoreService 

У меня есть красный, что может быть проблема с версией maven-compiler-plugin поэтому я обновил его до последней версии 3.5.1, но это не помогло.

Это Maven плагины, которые я использую во всех 3 модулей:

<plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <finalName>module3-${project.version}</finalName> 
         <artifactSet> 
          <includes> 
           <include>*:*</include> 
          </includes> 
         </artifactSet> 
         <filters> 
          <filter> 
           <artifact>*:*</artifact> 
           <excludes> 
            <exclude>META-INF/*.SF</exclude> 
            <exclude>META-INF/*.DSA</exclude> 
            <exclude>META-INF/*.RSA</exclude> 
           </excludes> 
          </filter> 
         </filters> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <manifestEntries> 
            <Main-Class>com.my.module3.App</Main-Class> 
            <Implementation-Title>${project.name}</Implementation-Title> 
            <Implementation-Version>${project.version}</Implementation-Version> 
            <Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id> 
            <Implementation-Vendor>${project.organization.name}</Implementation-Vendor> 
           </manifestEntries> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

Когда я строю модуль в IntelliJ нет никаких ошибок. Я даже вытащил репозиторий в новую папку и использовал команду mvn clean install для модуля3, и она заканчивается без проблем.

Я понятия не имею, где проблема. Не похоже, что с моим кодом что-то не так, поскольку он работает правильно (я отлаживал его). Любая помощь или предложения были бы весьма признательны.

+0

Кажется, что магазин не является последней версией. Потому что Дженкин должен проверить исходный код перед его созданием. Вы должны проверить: последний исходный код модуля 3 был передан Git? Если бы это было так, вы можете пойти в папку сборки Jenkins и проверить, получила ли она последнюю версию исходного кода модуля 3. Когда вы строите на Intelli .., исходный код был последним. Так что сборка прошла успешно – NangSaigon

+0

Код - это последняя версия. Я даже удалил строку 'git', скопировал код из моей папки dev и вставил ее в папку рабочего пространства Jenkins. Также я проверил файлы. Код есть. –

+1

Попробуйте удалить папку .m2 с вашего сервера jenkins. Таким образом, jenkins запускает загрузку всех ваших зависимостей, и вы получите новую версию. На самом деле проблема, с которой вы столкнулись, довольно часто встречается. –

ответ

1

Попробуйте удалить папку .m2 с вашего сервера jenkins. Таким образом, jenkins запускает загрузку всех ваших зависимостей, и вы получите новую версию. На самом деле проблема, с которой вы столкнулись, довольно часто встречается.

+0

Просто еще один вопрос. Должен ли я удалять папку .m2 перед каждой сборкой? Это кажется излишним. –

+0

Nah. Просто удалите его один раз, чтобы получить новые зависимости. Maven является довольно сложным, если вы, например, имеете версии моментальных снимков, вы можете оказаться в неправильной версии своего модуля, если не будете осторожны. Кроме того, поскольку @ João Marcos уже упомянул, что я также сохраняю Delete Workspace до того, как будет установлен флажок build starts. Сначала вам нужно установить «Плагин очистки рабочего пространства» в разделе «Управление jenkins -> плагинами управления» –

+0

Спасибо. Я не знал о плагине. Проблема заключается в том, что я использую плагин Workflow Multibranch Pipeline и кажется, что для него нет опции Delete Workspace. –

0

В настройке среды разработки вы можете выбрать опцию «Удалить рабочее пространство до начала сборки».

Этот параметр доступен после установки «Плагин очистки рабочего пространства»

+0

Адрес местонахождения этой точки? Я включил параметр «Отменить старые элементы», но я не могу найти тот, о котором вы говорите. –

+0

Откройте конфигурацию сборки, сделайте CTRL + F и найдите ее. Это находится внутри опций «Build Environment» –

+1

Possibli после установки: https://wiki.jenkins-ci.org/display/JENKINS/Workspace+Cleanup+Plugin –

Смежные вопросы