Maven build和maven-failsafe-plugin - 分叉的VM在没有正确说再见的情况下终止

时间:2017-10-19 14:02:29

标签: java maven docker windows-10 maven-surefire-plugin

我使用Docker和https://github.com/fabric8io/docker-maven-plugin进行集成测试。

在我的Windows 10(更新到Windows 10 1709 )计算机后,我遇到了Maven 3.5.0版本的以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20.1:verify (default) on project api: There are test failures.
[ERROR]
[ERROR] Please refer to D:\Projects\example\api\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_152\jre\bin\java -jar C:\Users\ALEXAN~1\AppData\Local\Temp\surefire1232565117555778729\surefirebooter3745527118196863348.jar C:\Users\Alexander\AppData\Local\Temp\surefire1232565117555778729 2017-10-19T16-45-23_780-jvmRun1 surefire4633356271541422594tmp surefire_169922891955689988tmp"
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] Crashed tests:
[ERROR] com.example.domain.api.flag.FlagControllerIT
[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)

现在我不知道出了什么问题,我的测试没有看到任何失败。

这个问题可能是什么原因以及如何解决?

已更新

我的项目有以下配置:

pom.xml

<build>
 <plugins>
  <plugin>
   <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
     <argLine>-Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m -XX:PermSize=1024m -noverify</argLine>
    </configuration>
   </plugin>
  </plugins>
 </build>

子模块pom.xml

<profiles>
 <profile>
  <id>local</id>
  <build>
   <plugins>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <configuration>                            
      <skipTests>true</skipTests>
     </configuration>
    </plugin>
   </plugins>
  </build>
 </profile>
</profiles>

如你所见 - 我添加了

<argLine>-Dfile.encoding=UTF-8 -Xms1024m -Xmx1G -XX:PermSize=1024m -noverify</argLine>

到我的父maven-surefire-plugin的{​​{1}}配置,但它没有帮助。

这是使用pom.xml-e

的Maven构建的输出
-X

这是完整的详细输出日志: https://files.fm/u/nfegb38f

Windows 10 1709更新

现在我想到这个问题可能与Windows 10 1709更新有关......我使用docker和https://github.com/fabric8io/docker-maven-plugin进行了我的整合测试,发现了以下主题 - https://github.com/docker/for-win/issues/1221有些东西是这个更新和虚拟化肯定是错误的......

7 个答案:

答案 0 :(得分:10)

我遇到了同样的问题,找到了三个对我有用的解决方案:

问题描述

问题仅在版本2.20.1和2.21.0中与maven插件 maven-surefire-plugin 有关。经过检查,您使用的是2.20.1版本。

解决方案1 ​​

将插件版本升级到 2.22.0 。添加 pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version>
</plugin>

解决方案2

将插件版本降级为 2.20 。添加 pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.20</version>
</plugin>

解决方案3

使用插件配置 testFailureIgnore 。添加 pom.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <testFailureIgnore>true</testFailureIgnore>
  </configuration>
</plugin>

答案 1 :(得分:2)

我也有类似的错误,与surefire插件上的forkstarter有关 也许您可以尝试在pom.xml

上添加此内容
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>--add-modules java.base ${argLine} -Xmx1024m -XX:MaxPermSize=256m</argLine>
                <forkCount>3</forkCount>
                <reuseForks>true</reuseForks>
            </configuration>
        </plugin>

希望,这可以帮到你

答案 2 :(得分:2)

VM可能由于多种原因而崩溃。我在这里强调的是它可能崩溃的另一原因。

我正在使用带有jvm config -Xmx2048m的maven-surefire-plugin版本2.22.0,但仍然对我来说失败。

失败原因: 我不小心将Windows命令提示符“窗口缓冲区大小”宽度更改为2000,而不是更改高度。就我而言,这会导致vm崩溃。当我使用git bash运行构建时,它运行良好。因此,我能够找出问题所在,并将命令提示符“窗口缓冲区大小”的宽度恢复为默认值,对我来说效果很好。

故障排除步骤:

  • 使用其他命令工具来验证此问题。像窗口命令提示符git bash。

答案 3 :(得分:2)

我使用了maven-surefire-plugin:2.22.1,但是分叉​​的VM仍然崩溃。 在我的情况下,为maven-surefire-plugin配置forkedProcessExitTimeoutInSeconds会有所帮助。自maven-surefire-plugin:2.20.1 30秒以来为默认值。我的项目进行了非常耗时的测试,因此分叉的JVM崩溃了。使用以下属性在pom中配置插件即可解决此问题。

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
                <forkedProcessExitTimeoutInSeconds>120</forkedProcessExitTimeoutInSeconds>
        </configuration>
</plugin>

答案 4 :(得分:2)

我有2.22.2版,但仍然收到该错误。我通过为surefire设置超时来通过。因此,最新添加的测试使执行时间超过了默认的30秒。

M = (A - B) if A > B 
M = (B - A) if B > A

超时默认值为30
https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#forkedProcessExitTimeoutInSeconds

2.22.2

编辑:实际上,在测试过程中发生的日志记录总计花费了很多时间来获取超时。因此,我更改了日志记录级别。

答案 5 :(得分:0)

尝试使用Manven OPT参数

export MAVEN_OPTS="-Xms1024m -Xmx1G -XX:PermSize=1024m -noverify"

答案 6 :(得分:0)

我遇到了同样的问题,以下解决方案对我有用:

<plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <forkedProcessExitTimeoutInSeconds>120</forkedProcessExitTimeoutInSeconds>
                    <includes>
                        <include>**/Test*.java</include>
                        <include>**/*Test.java</include>
                    </includes>
                    <properties>
                        <excludeTags>slow</excludeTags>
                    </properties>
                </configuration>
            </plugin>