Jenkins не показывает ошибки компилятора maven - PullRequest
15 голосов
/ 10 февраля 2012

При сборке нашего многомодульного проекта maven 3 в Jenkins, если есть ошибка сборки, мы получаем это загадочное сообщение о том, что плагин компилятора maven завершился неудачно. Это только начало происходить в течение последней недели:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11:22.340s
[INFO] Finished at: Fri Feb 10 09:44:02 CET 2012
[INFO] Final Memory: 171M/318M
[INFO] ------------------------------------------------------------------------
mavenExecutionResult exceptions not empty
message : Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project me.activity.impl: Compilation failure
cause : Compilation failure
Stack trace : 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project me.activity.impl: Compilation failure
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.jvnet.hudson.maven3.launcher.Maven3Launcher.main(Maven3Launcher.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:329)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:239)
    at org.jvnet.hudson.maven3.agent.Maven3Main.launch(Maven3Main.java:158)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:104)
    at hudson.maven.Maven3Builder.call(Maven3Builder.java:70)
    at hudson.remoting.UserRequest.perform(UserRequest.java:118)
    at hudson.remoting.UserRequest.perform(UserRequest.java:48)
    at hudson.remoting.Request$2.run(Request.java:287)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
    at java.util.concurrent.FutureTask.run(FutureTask.java:123)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
    at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure
    at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:516)
    at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 27 more
Maven schlug mit Fehlern fehl.
An attempt to send an e-mail to empty list of recipients, ignored.

При сборке из командной строки мы получаем обычные ошибки сборки:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5:24.906s
[INFO] Finished at: Fri Feb 10 08:17:31 EST 2012
[INFO] Final Memory: 173M/328M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project me.activity.impl: Compilation failure: Compilation failure:
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[1018,12] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[200,16] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[234,16] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[263,16] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[294,20] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[311,16] cannot find symbol
[ERROR] symbol  : class ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[1023,47] cannot find symbol
[ERROR] symbol  : variable ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] \p4views\VM\Base\main\modules\activity\impl\src\main\java\com\sap\me\activity\impl\ExtensionConfigurationService.java:[1025,67] cannot find symbol
[ERROR] symbol  : variable ActivityRuntimeType
[ERROR] location: class com.sap.me.activity.impl.ExtensionConfigurationService
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :me.activity.impl

Мы используем maven-3.0.4 как для локальных сборок, так и для Jenkins. Версия Jenkins была 1.3ish, но я обновил до 1.450, чтобы посмотреть, исчезнет ли проблема - это не так. Это произошло примерно в то время, когда мы перешли с maven-2.2.1 на maven-3.0.4, но я мог поклясться (хотя у меня нет доказательств), что я получал обычные ошибки сборки на Jenkins сразу после обновления maven, поэтому я не думаю, что это все, но это единственное изменение, которое я могу придумать, которое может вызвать это. Версия плагина компилятора 2.0.2.

Я видел подобное сообщение здесь , но его проблема была связана со сборками затмений, а не с Дженкинсом.

Ответы [ 4 ]

7 голосов
/ 02 июня 2012

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


Устранение неполадок

(Пропустите, если вам все равно, как я понял это для своих настроек, но это может помочь вам. Решение 1 - это то, что вам нужно, если вы нетерпеливы .)

Как это началось ...

Текущий рабочий каталог активно развивающегося проекта начал выкладывать логи, показывающие это поведение сегодня, когда некоторое время не было ошибок. Я использовал Windows 7, Maven 3.0.4, плагин компилятора 2.4 и java (c) 1.6.0_31.

При достижении определенного подмодуля maven мог бы выплевывать некоторые сообщения об ошибках и отказывать в сборке, за исключением сообщений об ошибках, не связанных (сообщающих об использовании проприетарных com.sun.* API), и не было бы никаких признаков фактической ошибки компиляции .

Все становится странно ...

На данный момент я нахожу этот поток, и я также пытаюсь пересобрать с различными версиями Java и версиями Maven-compiler-plugin. Вот забавная часть:

  • с компилятором-плагином 2.5, я получаю похожую проблему и нет действительного сообщения об ошибке;
  • с плагином компилятора 2.3, я получил бы аналогичную проблему с бессмысленным сообщением об ошибке с жалобой на отсутствующий пакет (который присутствует и в classpath, хотя!) ;
  • с плагином компилятора 2.3.2, я получил бы аналогичную проблему с бессмысленным сообщением об ошибке с жалобой на отсутствующий пакет (который присутствует и в classpath, хотя!) НО ** в другой точке ** при компиляции тестовых классов модуля (ранее это происходило при компиляции обычных классов).

От странного до странного

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

Все работало FINE . Озадаченность и отчаяние здесь.

Итак, я понял, что я работал над довольно огромным и сложным классом в другом рабочем пространстве в неисправном модуле. И я имею в виду довольно большой, сложный и довольно плохо написано. Тип зверя, который заставляет вас говорить своему боссу: «Пожалуйста, не заставляйте меня трогать это», и это заставляет ваш ключ DELETE щекотать вас каждый раз, когда вы сталкиваетесь с неудачей, наткнувшись на него в вашей IDE. На самом деле, эта штука настолько похожа на детище мрачного маргинального эксперимента и странно неэтичного биоисследования, что вы задаетесь вопросом, не произошло ли это прямо из RTC Wolfenstein или Doom, если антагонисты были кусочками кода. Класс, который вы не хотите оставлять в покое для написания кода ночью, и для которого Sonar тихо сообщает о почти 1000 нарушениях качества кода, включая индексы сложности, которые заставляют задуматься, не имеют ли PMD, JDepend и другие инструменты на самом деле все удар одновременно).

Но я отвлекся ...

Я скопировал его в это чистое и, казалось бы, рабочее пространство (к счастью для меня, это не повлияло на другие файлы, поэтому сделать это было довольно просто: просто скопировать).

Затем я перестраиваюсь с Maven, и он снова начинает капризничать, когда снова достигает модуля, содержащего этот файл, за исключением того, что на этот раз он выводит load ошибок стека трассировки, которые никогда не заканчиваются. Поэтому я хочу попытаться перезапустить ту же сборку, на этот раз сохраняя результаты в файле журнала, чтобы рассмотреть их поближе и (вот новая странная вещь, потому что пока это было недостаточно странно) ... снова не показывает ошибки.

Итак, я полагаю, что что-то, очевидно, очень неприятно, что javac должен идти вразрез с тем, что выглядит как переполнение стека, и искать фрагмент трассировки стека, который я мог видеть в своем журнале в первый раз. Вот часть этого (как я подозреваю, некоторые могут столкнуться с этим и найти этот ответ полезным):

[ERROR] at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
[ERROR] at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
[ERROR] at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1241)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210)
[ERROR] at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
[ERROR] at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1799)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522)
[ERROR] at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
[ERROR] at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
[ERROR] at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1241)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210)
[ERROR] at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
[ERROR] at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1799)
[ERROR] at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522)

И Google приятно указывает мне на ... StackOverflow, конечно:)

Компиляция Maven: сбой при выполнении javac

Где я вижу простую попытку (см. Ниже).

Конечно, это было бы намного проще для устранения неполадок, если трассировка стека появилась во всех ситуациях и во всех случаях и показала очевидное исключение StackOverflowException.Особенно если учесть, что в противном случае я уже видел эту ошибку и знаю, что она означает, но чертовски трудно понять, когда вы ** не видите * ошибки.

Не уверен, почему Мейвен проглотил это, но, возможно, javac просто потерпел крах без уведомления, и в управлении журналом произошел сбой, и он не удаляется должным образом.

Это также объясняет, почему эта ошибкапроисходит относительно случайно: это будет зависеть от ваших настроек оборудования, и небольшие изменения в классах javac будут переданы процессу.

Итак, что теперь ???Что ж, если есть сумасшедшее исключение переполнения стека или OutOfMemoryException, когда java пытается обработать ваш код, очевидно, вам нужно сделать что-то похожее на объяснение ниже ...


Решения

Решение 1 (так называемое «кратковременное / быстро-грязное /« сделай сам »»)

Обновите настройки памяти.Самый простой способ - что-то с , например, (для оболочки, похожей на bash):

export MAVEN_OPTS="-Xss1024k -Xms512m -Xmx1024m"

BEWARE : эти настройки, очевидно, будут зависеть от аппаратного обеспечения вашей платформы (ина вашей оболочке).

В моем случае, я имел обыкновение иметь:

export MAVEN_OPTS="-Xss128k -Xms384m -Xmx384m"

... потому что у меня довольно тяжелый проект и рабочая станция с не такой большой памятью, поэтомуМне нужно сжать каждый бит ОЗУ, который у меня есть, чтобы было запущено несколько экземпляров Eclipse, несколько серверов приложений и т. Д. Итак, мои JAVA_OPTS, ANT_OPTS и MAVEN_OPTS установлены с кучей опций, включая эти.

Это не обязательно то, что вы хотите !! Значение xss по умолчанию для 64-битной JVM в Windows на самом деле составляет 1024, поэтому я использую что-то значительно меньшее.Я просто говорю это, поскольку это может помочь другим в той же ситуации.Попытайтесь поднять его соответствующим образом и разумно для вашей конфигурации.

Итак, в конце концов, чтобы исправить эту конкретную проблему в моем проекте, мне пришлось изменить вышеупомянутое значение на:

export MAVEN_OPTS="-Xss256k -Xms384m -Xmx384m"

И теперь все работает отлично.

Может быть, некоторые другие вещи для вас разные.Дайте мне знать.

Решение 2 (он же «долгосрочный / дзен»)

Вы знаете, что лучше, чем возиться с настройками памяти, которые выиграли другие »не знаете, как возиться и, возможно, не имеют шанса, и это делает ваши сборки менее переносимыми? [аудитория кричит здесь]

Вы преобразуете ад из этого безобразного класса , который заставляет javac плакать из-за своей мамы.

Это так просто.Нет тысяч и тысяч строк классов, с безумными статическими инициализаторами, супер длинными методами и тому подобным.Если ваш код выглядит сложным для вас, он, безусловно, подходит и для плохого javac.

Сохраните процесс javac сегодня: рефакторинг вашего кода !!

0 голосов
/ 18 сентября 2012

Не уверен, решит ли это вашу проблему, но у меня была точно такая же проблема, потому что у родительского pom было определение плагина для плагина компилятора.Я скопировал то же самое определение плагина в реальный проект.Это решает проблему для меня, то есть Jenkins теперь правильно отображает ошибки компилятора.Не уверен, почему это решило проблему, но это так.Возможно, это как-то связано с тем, что maven разветвляет процесс компиляции подмодулей, а этот терминал не передается на консоль jenkins.Я буду исследовать больше, когда у меня будет время.

Дайте мне знать, если это работает для вас.Я скопировал определение моего плагина ниже стандартного:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>
</plugins>
0 голосов
/ 09 мая 2012

Вы должны проверить, где находится класс ActivityRuntimeType. Скорее всего, его нет в сборке компилятора или пути к классам. Обычно это происходит, когда класс, от которого вы зависите, находится в зависимости, которая неожиданно меняется.

0 голосов
/ 13 апреля 2012

Используемая мной версия плагина компилятора maven - 2.3.2. Из вывода ниже видно, что я получаю ошибки, как и следовало ожидать.

07:16:37  [INFO] Copying 0 resource
07:16:37  [INFO] 
07:16:37  [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ fusion-common ---
07:16:38  [INFO] Compiling 49 source files to /opt/jss/hudson/work/jobs/FMWJavaCommon/workspace/target/classes
07:16:42  [INFO] -------------------------------------------------------------
07:16:42  mojoFailed org.apache.maven.plugins:maven-compiler-plugin:2.3.2(default-compile)
07:16:42  [ERROR] COMPILATION ERROR : 
07:16:42  [INFO] -------------------------------------------------------------
07:16:42  [ERROR] /opt/jss/hudson/work/jobs/FMWJavaCommon/workspace/src/main/java/au/gov/qld/jag/jss/fusion/services/InvokeAuditLoggerService.java:[107,8] cannot find symbol
07:16:42  symbol  : method setGeneratedTimestamp(javax.xml.datatype.XMLGregorianCalendar)
07:16:42  location: class au.gov.qld.jag.jss.fusion.services.client.auditservice.AuditLogType
07:16:42  [INFO] 1 error
0

Конфигурация pom для плагина:

            <!-- Compiler Version to use for Compiling Java Code -->
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>

Других специальных настроек нет. Я использую Hudson 2.2.0-BETA и плагин Hudson :: Maven (legacy) 2.2.0-BETA.

...