Java Maven测试失败,出现“错误”;分叉VM终止“;码头工人

Java Maven测试失败,出现“错误”;分叉VM终止“;码头工人,java,maven,docker,alpine,Java,Maven,Docker,Alpine,在尝试在Docker容器中构建Maven Java应用程序时,我遇到了Surefire test runner插件中的一个奇怪错误: [ERROR]org.apache.maven.surefire.booter.SurefireBooterWorkException:分叉的VM在没有正确告别的情况下终止。调用VM崩溃或System.exit? [错误]命令为/bin/sh-c cd/app&/opt/java/openjdk/bin/java-jar/app/target/surefire/s

在尝试在Docker容器中构建Maven Java应用程序时,我遇到了Surefire test runner插件中的一个奇怪错误:

[ERROR]org.apache.maven.surefire.booter.SurefireBooterWorkException:分叉的VM在没有正确告别的情况下终止。调用VM崩溃或System.exit?
[错误]命令为/bin/sh-c cd/app&/opt/java/openjdk/bin/java-jar/app/target/surefire/surefirebooter158476366706412603.jar/app/target/surefire2019-02-15T20-04-23904-jvmRun1 surefire156811748693720284143tmp surefire\u 01815807763590795362tmp
使用基于Alpine Linux()的JDK11 Docker映像时出错。它一直在这个最小的Maven项目中复制:

测试运行失败后,
target/surefire reports
中唯一的文件是:
2019-02-15T20-04-23_904.dumpstream
,其内容为

创建于2019-02-15T20:04:24.258 错误:jarfile/app/target/surefire/surefirebooter158476236706412603.jar无效或损坏 下一步是深入研究这个
surefirebooter*.jar
文件,以及它被认为已损坏的原因,但遗憾的是,它只是临时的,在运行
mvn测试后被删除


奇怪的是,这种Surefire测试插件失败只发生在:

  • 使用Surefire的分叉新JVM模式时(默认行为);及
  • 基于Alpine Linux的Docker镜像。它不会在基于Ubuntu的图像上复制
有关更多信息,请参阅


更新1 这似乎与我有关。根据该问题中的建议,另一个解决方法是禁用Surefire插件中的系统类加载器:


)在没有任何其他解决方法的情况下修复了该问题。这真的很有趣,因为我使用了他们基于阿尔卑斯山的图像,所以我也会想到同样的问题


“”\_(ツ)_/“

这是maven docker映像上的一个错误。我在此线程上为jdk 8创建了一个类似的错误。我想你找不到这个问题的答案,可能会报告这个问题。如果你想解决这个问题,我建议你将你的docker映像更改为另一个有效的。如果你使用的是基于jdk11的应用程序,请使用不同类型的linux,如
-slim
-alpine
或standard。如果您使用较低的jdk,那么使用较低的jdk进行相同的测试。谢谢@FedericoPiazza,这完全正确。我注意到两个可选的Docker映像(一个基于Ubuntu,另一个基于alpine)没有这个问题,所以这就是我要说的。我在的自述中列出了它们。