java - Maven 编译错误,编译器没有任何错误

标签 java maven

我有一个使用 Maven 构建的 Java 应用程序。我们的 CI 系统 (Bamboo) 配置为使用 Maven 3.1.1,我在本地使用 Maven 3.5。我们到处都在使用 Java 8u152;我也可以使用 8u144 重现该问题。

今天,在我对 Java 代码进行了细微的更改后,我们开始收到此错误(混淆了路径和项目名称):

[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ project-name ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 35 source files to /bamboo/bamboo-home/xml-data/build-dir/ASP-CAS-CJT/project/service/target/test-classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.036s
[INFO] Finished at: Tue Feb 13 15:15:51 EST 2018
[INFO] Final Memory: 26M/715M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile (default-testCompile) on project project-name: Compilation failure -> [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

其他类似构建的服务构建良好。当我在本地运行时,这个构建通过了。它还可以在 Bamboo 主机上从命令行手动使用 Maven 3.5.0 构建良好。使用 -e 或 -X 调用 Maven 不会提供额外的有用信息;堆栈跟踪仅表明存在编译失败。

此外,target/test-classes 目录存在并包含所有 35 个预期的 .class 文件;编译似乎和我预期的一样成功。

我搜索了 POM 和父 POM,寻找与测试编译阶段相关的 Hook 。我什么也没找到,上面的输出表明没有。

我不知道是什么导致 Maven 认为存在编译器错误,而实际上并没有。有人以前见过这个吗?

最佳答案

简短版本:javac 遇到 StackOverflowError(具有讽刺意味!😄),这是由对 Builder 的 693 深度链接方法调用引起的。

诊断:我们使用 Maven 的 -X 输出将实际命令提取到 javac,然后单独执行。这为我们提供了 javac 的完整输出,使用 Maven 似乎无法获得。输出告诉我们它正在处理哪个类,然后吐出 SOE 的堆栈跟踪。然后,我查看了对该文件的提交历史,发现与我提交的微小更改一致的是,其他人已经向构建器链添加了一些调用。

为了验证诊断,我们将-J-Xss256M 添加到javac 的args 中并再次运行;编译成功。我没有使用非标准 args 运行编译器(并花时间弄清楚如何让 Maven 以这种方式调用它),而是将构建器链分成两个较小的链。随着该更改的提交,构建现在正在通过 Bamboo。

注意:在问题中,我说编译器输出包含所有 35 个预期的类文件;这是一个巧合。它包含 35 个文件,与源文件的数量相匹配,但由于一些内部类,35 个 .java 文件应该生成 42 个 .class 文件。

我们使用的是旧版本的 maven-compiler-plugin(v3.1,自 2013 年起)。我将试验新版本是否能更好地暴露故障。

关于java - Maven 编译错误,编译器没有任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775213/

相关文章:

java - 如何计算Java中某些列中txt文件中整数出现的次数?

java - 如何并发素数分解?

java - RabbitMQ MessageConverter 在运行 Spring Boot 应用程序时出现错误

database - 为测试生成唯一的模式名称

java - Maven POM 到 Ivy 描述符 XSLT

java - 如何在 Spring Boot 应用程序中排除给定运行时配置文件中的包

java - 在不知道输出类型的情况下从 DataInputStream 读取

java - Maven 构建的泛型问题

maven - maven项目站点如何使用markdown?

java - 如何通过文件内容排除特定的 SonarQube 问题