java - Maven surefire 找不到 ForkedBooter 类

标签 java maven maven-surefire-plugin

最近来到一个新项目,我正在尝试编译我们的源代码。昨天一切正常,但今天是另一回事。

每次我在模块上运行 mvn clean install 时,一旦达到测试,它就会崩溃并报错:

[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ recorder ---
[INFO] Surefire report directory: /lhome/code/recorder/target/surefire-reports
[INFO] Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider
[INFO] parallel='none', perCoreThreadCount=true, threadCount=0, useUnlimitedThreads=false, threadCountSuites=0,     threadCountClasses=0, threadCountMethods=0, parallelOptimized=true

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

及以后:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project recorder: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?

我正在运行 Debian 9 (拉伸(stretch))64 位,OpenJDK 1.8.0_181,Maven 3.5.4,在我在 ~/.m2/settings.xml 中配置的公司代理后面工作。

如果我没记错的话,最新的 Surefire 版本是 2.22.1 很奇怪。我试图指定插件版本,但它没有得到更新,否则任何POM中都没有插件版本规范( parent 、祖 parent 或这个)。

我设法迫使 Maven 将 Surefire 版本更改为最新版本,但现在情况更糟:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[...]

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project recorder:     There are test failures.
[ERROR]
[ERROR] Please refer to /lhome/code/recorder/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /lhome/code/recorder/ && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye.     VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /lhome/code/recorder/ && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:669)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:282)
[ERROR]     at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1183)
[ERROR]     at     org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1011)
[ERROR]     at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:857)
[ERROR]     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
[ERROR]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR]     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
[ERROR]     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
[ERROR]     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
[ERROR]     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
[ERROR]     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:954)
[ERROR]     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
[ERROR]     at org.apache.maven.cli.MavenCli.main(MavenCli.java:192)
[ERROR]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR]     at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR]     at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)

最佳答案

要修复它(在 2018 年),请将您的 openjdk 更新到最新版本,至少为 8u191-b12。 如果此问题在 2020 年再次出现,则 openjdk 的默认行为可能是更改,然后您将需要更新 maven surefire 插件。

这是一个现已修复 bug in the openjdk-8 package (行为明显偏离上游而无需;缺少上游补丁以恢复禁用安全检查)您刚刚升级到。但也是a bug in the surefire plugin, SUREFIRE-1588, supposedly fixed in surefire 3.0.0-M1 :它显然在 Java 将来只允许相对路径名的地方使用绝对路径(并且 Debian 已经激活了 future 的行为)。

软件包版本 8u181-b13-2 指出:

  • 应用来自 8u191-b12 安全更新的补丁。

请注意 191-b12 != 181-b13。 191-b12 安全补丁几天前刚刚发布,显然维护人员希望尽快将它们发送给您。完全更新到 191-b12 可能需要额外的测试(好吧,显然应该有这个上传)。

有几个解决方法:

  1. 您可以安装previous package from snapshots.d.o反而。降级后,您可以使用 sudo aptitude forbid-version openjdk-8-jre-headless 禁止损坏的版本(如果您使用的是 aptitude 而不是 apt)。对于常规的“apt”,我没有看到类似的禁止机制,因此您可能需要使用 apt pinning 来防止重新安装此升级(或者您只是继续再次降级,我希望这将很快得到解决)。
  2. 根据错误跟踪,使用任何常用方法(例如 JAVA_FLAGS)设置属性 -Djdk.net.URLClassPath.disableClassPathURLCheck=true 也应该会有所帮助。但我自己并没有验证这一点。你显然甚至可以add the workaround to ~/.m2/settings.xml轻松为您的所有 Maven 构建启用它。

如您所见,错误跟踪工作,问题已缩小,修复包可用,并且新版本的 surefire 插件即将推出!

关于java - Maven surefire 找不到 ForkedBooter 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53010200/

相关文章:

java - 使用 tomcat7-maven-plugin 指定要打包的目录

java - 简单的 Tika 型探测器和 Apache POI

java - 我启用了 rerunFailingTestsCount Surefire 功能。如何配置 Jenkins CI 以显示丰富的测试数据?

Spring Boot 无法运行 maven-surefire-plugin ClassNotFoundException org.apache.maven.surefire.booter.ForkedBooter

java - 局部变量可能已经被赋值

java - Hadoop 无法设置 Reducers > 1

java - 从 java 调用 shell,它提示 "stty: standard input: Invalid argument"

java - 为什么 inheritedDoc 没有在构造函数上定义?

maven - Jenkins 插件显示在插件页面但不显示在配置页面

maven - Maven 的“surefire”版本和“failsafe”版本总是相同的吗