我有一份 Jenkins 工作,上周五还在工作,但从昨天开始就开始失败。这是我的设置
Maven 3.3.9
Oracle JDK 1.8 u144
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
</plugin>
我尝试添加 -e 和 -X 选项,甚至增加日志级别,我在日志中看到的唯一消息是:
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:9c6abc2:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 31 more
Caused by: java.lang.RuntimeException: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
这是我尝试过的事情列表(全部来自Stackoverflow):
我注意到的其他一些事情是,当执行分叉的 JVM 时,似乎“argLine”没有被传递。例如,这是来自日志:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Forking command line: /bin/sh -c cd /data/apps/jenkins/workspace/Build_Deploy_Full_Dev/myapp/core && /data/apps/java/jdk1.8.0_144/jre/bin/java -jar /data/apps/jenkins/workspace/Build_Deploy_Full_Dev/myapp/core/target/surefire/surefirebooter1916960086357827445.jar /data/apps/jenkins/workspace/Build_Deploy_Full_Dev/myapp/core/target/surefire/surefire2156897915383473994tmp /data/apps/jenkins/workspace/Build_Deploy_Full_Dev/myapp/core/target/surefire/surefire_03179213296845219723tmp
可以看到,调用分叉的 JVM 的命令行没有参数。另外,最后澄清一下,我的测试没有调用任何像“System.exit”这样的调用。我将不胜感激任何帮助!
我从安装 Jenkins 的同一台服务器运行构建,但是是从 Jenkins 外部运行的,换句话说,是从命令行运行的。我获得了成功的构建,这表明 Maven 和我的依赖项都不是问题原因的一部分。重新启动完成后,构建开始正常工作。
我们今天(2024-06-14)观察到一个非常相似的问题,并找到了部分解释。使用 Maven 3.5.3 构建时,Surefire 突然开始失败并出现错误(还缺少相同的神秘版本
9c6abc2
,这就是我找到这篇文章的原因):
The following artifacts could not be resolved:
org.apache.maven.surefire:surefire-booter:jar:9c6abc2
使用 Maven 3.9.7 构建完全相同的构建会导致另一个类似的问题:
The following artifacts could not be resolved:
org.apache.maven.surefire:surefire-api:jar:3.3.0 (absent)
确实,在 MavenCentral 中,我找不到 3.3.0 版本,最新的版本是六个月前的 3.2.5。然而,在Apache自己的Nexus上,我发现了三天前(2024-06-11)发布的全新的surefire版本3.3.0。不知何故,Maven 已经知道最新版本,但我们的来源 (MavenCentral) 尚未提供它。
这对我来说仍然是一个谜,为什么旧的 Maven 3.5.3 想要获取 Surefire 版本 9c6abc2!