启动fork时出现Maven错误,请检查日志中的输出
Posted
技术标签:
【中文标题】启动fork时出现Maven错误,请检查日志中的输出【英文标题】:Maven error occurred in starting fork, check output in log 【发布时间】:2018-09-09 18:08:48 【问题描述】:我使用 Maven、docker-maven-plugin 和 Spring Boot。现在我遇到了以下问题:
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:08 min
[INFO] Finished at: 2018-03-30T20:31:08+03:00
[INFO] Final Memory: 76M/1162M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20.1:verify (default) on project domain: There are test failures.
[ERROR]
[ERROR] Please refer to D:\Projects\decisionwanted\domain\target\failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was cmd.exe /X /C "c:\Java\jdk1.8.0_162\jre\bin\java -jar C:\Users\ALEXAN~1\AppData\Local\Temp\surefire7684467242957210997\surefirebooter6934205730694228299.jar C:\Users\Alexander\AppData\Local\Temp\surefire7684467242957210997 2018-03-30T20-28-03_824-jvmRun1 surefire8708053899862809316tmp surefire_06397887630134904290tmp"
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] Crashed tests:
[ERROR] com.decisionwanted.domain.DecisionCharacteristicIT
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:686)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[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:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
[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)
[ERROR] -> [Help 1]
我读到此问题可能与 maven-surefire-plugin 有关,因此我已将其添加到我的父 pom 中:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
</plugin>
<plugins>
</pluginManagement>
对于继承的 pom:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
</plugins>
但没用。
如何解决这个问题?
【问题讨论】:
尝试降级到2.19.1 ..? 检查***.com/q/23260057/3530898和***.com/q/46831762/3530898 请将版本设置为2.19.1... 不,你不应该需要它... @khmarbaise 感谢您的建议!我已将 maven-failsafe-plugin 和 maven-surefire-plugin 版本设置为 2.18.1,看起来问题已经消失了 【参考方案1】:我遇到了同样的问题,添加以下内容对我有用:版本 3.0.0-M3 修复了问题
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<forkCount>0</forkCount>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
【讨论】:
【参考方案2】:我也遇到了同样的问题。
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: Error occurred in starting fork, check output in log
在我的上下文中,我正在构建一个 Spring Boot 应用程序。所有测试都正常,但是由于应用程序代码关闭过程中的问题,应用程序没有正确关闭。我猜该进程没有返回等于 0 的退出代码。
一旦我们解决了这个关闭问题,这个万无一失的插件异常就不再发生了。
这可能是你的问题的提示。
【讨论】:
【参考方案3】:我在本地环境中也遇到过这种情况(构建在其他环境中运行良好)。所以我没有修改 pom.xml,而是添加了 forkCount=0 作为命令行参数,它解决了这个问题。喜欢:
mvn clean install -DforkCount=0
【讨论】:
【参考方案4】:将 useSystemClassloader 设置为 false:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
【讨论】:
你能解释一下为什么这会解决问题吗?我很谨慎地使用它而不知道它的作用。 总有文档:maven.apache.org/surefire/maven-surefire-plugin/examples/… 该链接解释了操作系统限制如何导致这些问题、可能的方法中涉及的权衡和潜在的解决方案。【参考方案5】:我遇到了类似的错误,因为我的分支名称中有破折号 -
,而 Jenkins 失败了。
[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] 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:671)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:533)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:278)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:244)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1149)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:978)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:854)
在用另一个名字创建了一个相同的分支后,我又开始工作了。
【讨论】:
【参考方案6】:除了 aure_bobo 回答谁说遗留代码可能导致退出代码!= 0:
在我的情况下,我的 IT 阶段全部成功,但仅在 CI/CD 上出现此错误:我无法在本地诊断/重现:所以无法知道原因,并且在 surefire fork 关闭时哪个模块出错:没有堆栈从surefire 3.0.0-M5 code 跟踪,因为它不是超时。
所以我使用了这个技巧:
为了解决应用程序故障,暂时将故障安全插件配置为永不分叉(doc: forkMode>never):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>$maven-failsafe-plugin.version</version>
<configuration>
<!-- (...) -->
<forkMode>never</forkMode>
<!-- (...) -->
</configuration>
在我的例子中,通过这个技巧,我能够重现:所有 IT 都成功,然后在关闭时获得完整的堆栈跟踪。
【讨论】:
以上是关于启动fork时出现Maven错误,请检查日志中的输出的主要内容,如果未能解决你的问题,请参考以下文章