Jenkins没有显示maven编译器错误

tdr*_*ury 15 java maven-3 maven jenkins

在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.
Run Code Online (Sandbox Code Playgroud)

从命令行构建时,我们得到正常的构建错误:

[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
Run Code Online (Sandbox Code Playgroud)

我们将maven-3.0.4用于本地构建和Jenkins.詹金斯版本是1.3ish,但我升级到1.450,看看问题是否会消失 - 事实并非如此.这发生在我们从maven-2.2.1移动到maven-3.0.4的时候,但是我可以发誓(虽然我没有证据)我在Jenven升级之后就得到了正常的构建错误,所以我不要以为就是这样,但这是我能想到的唯一一个会导致这种变化的变化.编译器插件版本是2.0.2.

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

hay*_*lem 7

得到了答案,这可能对你不起作用,因为它似乎依赖于许多事情和环境,但我怀疑这对大多数人来说确实相关.


故障排除

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

怎么开始......

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

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

事情变得怪异......

此时我发现了这个线程,我也尝试使用不同的java版本和maven-compiler-plugin版本重新构建.这是有趣的部分:

  • 使用compiler-plugin 2.5,我会遇到类似的问题,并且没有有效的错误报告;
  • 使用编译器插件2.3,我会得到一个类似的问题,一个无意义的错误报告抱怨丢失的包 (虽然存在,但在类路径中!) ;
  • 使用编译器插件2.3.2,我会得到一个类似的问题,一个无意义的错误报告抱怨丢失的包 (虽然存在并且在类路径上!) 但是**在测试类的不同点**模块的编译(以前它发生在正常类的编译期间).

从奇怪到奇怪

出于疑问,我切换到另一个目录,清理了项目并重新构建了所有内容.

一切都很精细.困惑和绝望在这里.

所以我意识到我正在另一个工作区中的一个相当庞大而复杂的类中,在故障模块中.我的意思是相当庞大,复杂,写得相当糟糕.让你告诉你的老板的野兽类型"请不要让我触摸这个",每当你在IDE中遇到不幸的事情时,这会使你的DELETE键发痒.事实上,这个东西看起来非常像一个黑暗的margic实验的后代和奇怪的不道德的生物研究,你想知道它是不是来自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)
Run Code Online (Sandbox Code Playgroud)

谷歌很好地指出... StackOverflow,当然:)

Maven编译:执行javac失败

在哪里我可以看到一个简单的尝试(见下文).

当然,如果堆栈跟踪出现在所有情况下并且在所有情况下都显示出明显的StackOverflowException ,那么这将更容易进行故障排除.特别是考虑到我已经看到了这个错误,并且知道这意味着什么,但是当你**看不到错误时,要想出更加难以理解.

不知道为什么Maven吞下了那个,但可能javac只是在没有通知的情况下崩溃,并且在日志管理中出现了问题并且它没有被正确刷新.

这也可以解释为什么这个bug会相对随机发生:它会受到硬件设置的影响,并且javac会给进程带来轻微的类更改.

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


解决方案

解决方案1(又名"短期/快速n-dirty/please-make-it-work")

升级内存设置.最简单的方法是用什么样(对于bash类似的壳):

export MAVEN_OPTS="-Xss1024k -Xms512m -Xmx1024m"
Run Code Online (Sandbox Code Playgroud)

请注意:这些设置显然取决于您平台的硬件(在您的shell上).

在我的情况下,我实际上曾经有过:

export MAVEN_OPTS="-Xss128k -Xms384m -Xmx384m"
Run Code Online (Sandbox Code Playgroud)

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

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

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

export MAVEN_OPTS="-Xss256k -Xms384m -Xmx384m"
Run Code Online (Sandbox Code Playgroud)

现在一切都很好用.

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

 

解决方案2(又名"长期/禅")

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

您重构了地狱,是对接丑类,使javac哭了妈妈.

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

javac今天保存一个过程:重构您的代码!!


swe*_*tfa 0

我使用的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
Run Code Online (Sandbox Code Playgroud)

插件的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>
Run Code Online (Sandbox Code Playgroud)

没有其他特殊配置。我正在使用 Hudson 2.2.0-BETA 和 Hudson::Maven(旧版)插件 2.2.0-BETA。