为了账号安全,请及时绑定邮箱和手机立即绑定

Maven surefire 找不到 ForkedBooter 类

Maven surefire 找不到 ForkedBooter 类

哈士奇WWW 2021-12-10 10:49:21
最近来到一个新项目,我正在尝试编译我们的源代码。昨天一切正常,但今天是另一回事。每次我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.ForkedBooterResults :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(父、祖父或这个)中都没有插件版本规范。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

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

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

软件包版本 8u181-b13-2 说明:

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

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

有几种解决方法:

  1. 您可以从 snapshots.do安装以前的包 。降级后,您可以apt使用sudo aptitude forbid-version openjdk-8-jre-headless. 对于常规的“apt”,我没有看到类似的禁止机制,因此您可能需要使用 apt pinning 来防止重新安装此升级(或者您只是继续降级,我希望这会很快得到解决)。

  2. 根据错误跟踪,-Djdk.net.URLClassPath.disableClassPathURLCheck=true使用任何常用方法(例如,JAVA_FLAGS)设置属性也应该有所帮助。但我自己没有验证过。显然,您甚至可以添加变通方法以~/.m2/settings.xml轻松地为所有 Maven 构建启用它。

如您所见,错误跟踪有效,问题已缩小,并且有一个固定包可用,新版本的surefire 插件即将推出!


查看完整回答
反对 回复 2021-12-10
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

将 useSystemClassloader 设置为 false:


<plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-surefire-plugin</artifactId>

    <configuration>

        <useSystemClassLoader>false</useSystemClassLoader>

    </configuration>

</plugin>

如果您不是从为您定义了版本的父级(例如 Spring Boot starter)继承,您还需要定义它。


查看完整回答
反对 回复 2021-12-10
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

我有另一种解决方法。设置环境变量_JAVA_OPTIONS。我已经将它用于我们的 TeamCity 构建代理,现在我们的构建运行良好。

_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信