Jenkins 未显示 maven 编译器错误故障 排除解决 方案

2022-09-03 07:59:00

在 Jenkins 中构建我们的多模块 maven 3 项目时,如果出现构建错误,我们会收到一条神秘的消息,指出 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

我们在本地构建和 Jenkins 上使用 maven-3.0.4。Jenkins 版本是 1.3ish,但我升级到了 1.450,看看问题是否会消失 - 它没有。这发生在我们从 maven-2.2.1 迁移到 maven-3.0.4 的时候,但我可以发誓(尽管我没有证据)在 maven 升级后,我在 Jenkins 上遇到了正常的构建错误,所以我认为不是这样,但这是我能想到的唯一会导致这种情况的变化。编译器插件版本为 2.0.2。

我在这里看到了类似的帖子,但他的问题与eclipse构建有关,而不是Jenkins。


答案 1

得到了一个答案,这可能不适合你,因为它似乎相当依赖于许多事情和情况,我怀疑它确实与这里的大多数人有关。


故障 排除

(如果您不关心我如何为我的设置解决这个问题,请跳过,但它可能对您的设置有所帮助。如果您不耐烦,解决方案1位是您想要的。

它是如何开始的...

当前一个积极开发的项目的工作目录在一段时间内没有错误的情况下,今天开始吐出显示这种行为的日志。我使用的是Windows 7,Maven 3.0.4,编译器插件2.4和java(c)1.6.0_31。

当到达特定的子模块时,maven 会吐出一些错误消息并使构建失败,除非错误消息不相关(报告使用专有 API),并且没有实际编译错误的迹象。com.sun.*

事情变得奇怪...

在这一点上,我找到了这个线程,我也尝试使用不同的java版本和maven-compiler-plugin版本重新构建。这是有趣的部分:

  • 使用编译器插件2.5,我会遇到类似的问题,并且没有有效的错误报告;
  • 使用编译器插件2.3,我会遇到类似的问题,其中包含一个荒谬的错误报告,抱怨缺少一个包(尽管存在并且在classpath上!;
  • 使用编译器插件2.3.2,我会遇到一个类似的问题,一个荒谬的错误报告抱怨缺少一个包(虽然存在并且位于classpath上!)但是**在测试类的模块编译中的不同点**(以前它发生在正常类编译期间)。

从怪异到怪异

由于变得可疑,我切换到另一个目录,并干净地签出项目并重新构建了所有内容。

切都很好。困惑和绝望在这里。

所以我意识到我正在另一个工作区,在有故障的模块中处理一个相当庞大复杂的类。我的意思是相当庞大,复杂,而且写得相当差。那种让你告诉你的老板“请不要让我碰这个”的野兽,每次你在IDE中遇到它的不幸时,你的DELETE键都会让你发痒。事实上,这个东西看起来很像一个黑暗的玛吉克实验和奇怪的不道德的生物研究的后代,以至于你想知道它是否不是直接来自RTC Wolfenstein或Doom,如果对手是代码的碎片。你不想在晚上独自编码的类,Sonar悄悄地报告了近1000个代码质量违规,包括复杂性指数,让你怀疑PMD,JDepend和其他工具实际上是否同时有一笔划痕)。

但是我说点题外话...

我把它复制到这个干净且看似有效的工作区(幸运的是,它不会影响其他文件,所以这样做很简单:只需复制过来)。

然后我用Maven重建,当它再次到达包含此文件的模块时,它会变得胡思乱想,除了这次它打印出一堆错误,一个永远不会结束的堆栈跟踪。因此,我想尝试重新运行相同的构建,这次将输出保存到日志文件中以进行仔细查看,并且(这是新的奇怪的东西,因为到目前为止这还不够奇怪)...它再次不显示任何错误。

所以,我发现有些东西显然是非常讨厌的,因为要肚子上看起来是堆栈溢出,并寻找我第一次在日志中看到的堆栈跟踪。这是其中的一部分(因为我怀疑有些人可能会遇到这个问题,并发现这个答案很有用):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)

谷歌很好地指出了我...堆栈溢出,当然:)

Maven 编译:执行 javac 失败

在那里我可以看到一件容易尝试的事情(见下文)。

当然,如果堆栈跟踪出现在所有情况和所有情况下,并显示明显的StackOverflowException,这将更容易进行故障排除。特别是考虑到我已经看到了这个错误,并且知道它意味着什么,但是当你**看不到*错误时,要弄清楚要困难得多。

不知道为什么Maven吞下了那个,但也许只是在没有通知的情况下崩溃了,日志管理中搞砸了,它没有被正确冲洗掉。javac

这也解释了为什么这个错误发生得相对随机:它会受到硬件设置的影响,并且对要处理的类进行了轻微的更改。javac

那么,现在该怎么办???好吧,如果当java尝试处理你的代码时,有一个疯狂的堆栈溢出异常或OutOfMemoryException,显然你需要做一些类似于下面解释的事情......


解决 方案

解决方案1(又名“短期/快速n-肮脏/请-使它-工作”)

升级内存设置。最简单的方法是使用类似的东西(对于类似bash的shell):

export MAVEN_OPTS="-Xss1024k -Xms512m -Xmx1024m"

注意:这些设置显然取决于平台的硬件(以及你的外壳)。

就我而言,我实际上曾经有过:

export MAVEN_OPTS="-Xss128k -Xms384m -Xmx384m"

...因为我有一个非常繁重的项目和一个不那么具有内存能力的工作站,所以我需要从中挤出我能挤出的每一点RAM来运行多个Eclipse实例,多个应用程序服务器等...所以我JAVA_OPTS,ANT_OPTS和MAVEN_OPTS设置了一堆选项,包括这些。

这不一定是你想要的!Windows上64位JVM的默认xss实际上是1024,所以我使用的东西要小得多。我只是说它,因为它可以帮助处于相同情况的其他人。尝试相应地合理地为您的配置提高它。

因此,最终,为了解决项目中的这个特定问题,我不得不将上述内容更改为:

export MAVEN_OPTS="-Xss256k -Xms384m -Xmx384m"

现在一切都很像桃色。

也许其他一些事情对你来说是不同的。让我知道。

 

解决方案2(又名“长期/禅宗”)

您知道有什么比摆弄其他人不知道要摆弄并且可能没有机会的内存设置更好的呢?这使您的构建变得不那么便携?[观众在这里尖叫]

从那个屁股丑陋的阶级中重构了地狱,这个阶级为它的妈妈哭泣。javac

就是这么简单。没有成千上万行的长类,有疯狂的静态初始值设定项,超长的方法和类似的东西。如果你的代码对你来说看起来很复杂,那么对于穷人来说,它肯定也是。javac

立即保存javac进程:重构您的代码!!


答案 2

我使用的 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。


推荐