Syl*_*dis 210 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
Run Code Online (Sandbox Code Playgroud)
后来:
[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?
Run Code Online (Sandbox Code Playgroud)
我正在使用OpenJDK 1.8.0_181,Maven 3.5.4 运行Debian 9(Stretch)64位,在我的公司代理服务器后面工作.~/.m2/settings.xml
奇怪的是,如果我没记错的话,最新的Surefire版本是2.22.1.我试图指定插件版本,但它没有得到更新,否则在任何POM(父,祖父或这一个)中都没有插件版本规范.
我设法迫使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)
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 244
要修复它(在2018年),请将openjdk更新到最新版本,至少为8u191-b12.如果此问题在2020年再次出现,则可能是openjdk的默认行为已更改,然后您需要更新maven surefire插件.
这是openjdk-8软件包中的一个现已修复的 错误(行为偏离上游而不需要;缺少上游修补程序以恢复为禁用安全检查),您刚刚升级到该软件包.但它也是surefire插件中的一个错误,SUREFIRE-1588,据说固定在surefire 3.0.0-M1中:它显然是在Java将来只允许相对路径名称的地方使用绝对路径(并且Debian激活了未来的行为已经).
包版本8u181-b13-2说明:
请注意,191-b12!= 181-b13.几天前,191-b12安全补丁刚刚问世,显然维护人员希望快速将它们发送给您.完全更新到191-b12可能需要额外的测试(好吧,显然应该进行上传).
有几种工作方式:
apt)sudo aptitude forbid-version openjdk-8-jre-headless.对于常规的"apt",我没有看到类似的禁止机制,因此您可能需要使用apt pinning来防止重新安装此升级(或者您只是继续降级,我希望很快就会解决).-Djdk.net.URLClassPath.disableClassPathURLCheck=true使用任何常用方法(例如JAVA_FLAGS)设置属性也应该有所帮助.但我自己没有证实这一点.您甚至可以添加变通方法,~/.m2/settings.xml以便轻松地为所有Maven构建启用它.正如您所看到的,错误跟踪工作,问题缩小了,并且有一个固定的软件包可供使用,新版本的surefire插件即将推出!
Mar*_*orn 51
将useSystemClassloader设置为false:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果您不是从具有为您定义的版本的父级继承(例如Spring Boot启动程序),那么您还需要定义它.
小智 37
我有另一个解决方法.设置环境变量_JAVA_OPTIONS.我已经将它用于我们的TeamCity构建代理,现在我们的构建运行良好.
_JAVA_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true
Run Code Online (Sandbox Code Playgroud)
Jes*_*ick 25
我在JIRA中发布了上述解决方法之一的更具针对性的变体.添加到~/.m2/settings.xml:
<profile>
<id>SUREFIRE-1588</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
</properties>
</profile>
Run Code Online (Sandbox Code Playgroud)
bru*_*osg 12
我在我的GitLab CI版本中遇到了这个问题,它正在使用maven:3.5.4-jdk-8Docker镜像.
改变它来maven:3.5.4-jdk-8-alpine解决问题.
我按照这个链接https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html并在pom.xml中添加了以下插件,它工作正常,
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
Run Code Online (Sandbox Code Playgroud)
当对3.6.0-jdk-8图像使用GitLab CI / CD时,仅以下属性有所帮助(无需修改pom.xml)。
-Dsurefire.useSystemClassLoader=false
Run Code Online (Sandbox Code Playgroud)
上面设置属性“-Djdk.net.URLClassPath.disableClassPathURLCheck=true”的建议对我不起作用,但设置以下内容确实可以:
-DforkCount=0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46717 次 |
| 最近记录: |