【问题标题】:The forked VM terminated without saying properly goodbye. VM crash or System.exit called分叉的虚拟机没有正确告别就终止了。 VM 崩溃或调用 System.exit
【发布时间】:2014-06-09 05:11:39
【问题描述】:

请帮我解决这个问题。我不太明白日志中的错误是什么意思。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 21.749s
[INFO] Finished at: Thu Apr 24 10:10:20 IST 2014
[INFO] Final Memory: 15M/37M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project samples.simpleforwarding: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command wascmd.exe /X /C ""C:\Program Files\Java\jdk1.7.0_55\jre\bin\java" -Xmx1024m -XX:MaxPermSize=256m -jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefirebooter53410321571238933.jar E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire86076271125218001tmp E:\OpenDayLight\controller\opendaylight\samples\simpleforwarding\target\surefire\surefire_01846991116135903536tmp"
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

【问题讨论】:

  • 请按照输出提示使用 -e 和 -X 重新运行 Maven,然后粘贴它提供的内容。另外,您是在构建自己的代码还是现有的库?如果您正在构建自己的代码,您是否在任何地方调用 System.exit(int) ?如果您正在构建现有库,您从哪里获得源代码?
  • @Dylon Edwards:这是一个现有的源代码,用于 SDN 实施的 OpenDayLight 项目。
  • 我最近遇到的一个重现该问题的场景是当我从 xml 文件运行测试套件时。如果一个 xml 文件定义了一个不再存在的类,或者引用了一个类的旧的完全限定名已被移动,那么 JVM 将无法加载该类。这会导致您观察到奇怪的消息。查看任何堆栈跟踪可以帮助您识别此类问题,在这种情况下无需传递 -e 或 -X 开关。
  • @astack 解决方案是什么?请您标记答案或写下您自己的答案。
  • 你试试这个? ``` org.apache.maven.pluginsmaven-surefire-pluginversion ```

标签: java maven-surefire-plugin opendaylight


【解决方案1】:

我遇到了同样的问题并通过添加解决了:

<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>

整个插件元素是:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <forkCount>3</forkCount>
    <reuseForks>true</reuseForks>
    <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
  </configuration>
</plugin>

【讨论】:

  • +1 我逐字使用了这个 sn-p,它解决了我与 Travis-CI 的问题。我们没有在任何开发人员的工作站上得到这个。
  • 以上没有为我解决问题。当.m2 中的依赖项(jar 等)之一损坏时,“可能”会发生此问题。删除 ~/.m2/repository rm -rf ~/.m2/repository 然后 mvn install 为我解决了它。
  • 复制并粘贴到我的 pom 文件中,它就像一个魅力,谢谢
  • OpenJDK 64 位服务器 VM 警告:忽略选项 MaxPermSize=256m; 8.0 中删除了支持
  • 有人能解释一下它的实际作用和作用吗?
【解决方案2】:

在我的情况下,问题与输出到 IntelliJ IDEA 控制台(OS windows 10)的日志过长有关。

命令:

mvn clean install

这个命令解决了我的问题:

mvn clean install > log-file.log

【讨论】:

  • 在我的情况下,太多的日志记录是真正的问题!
  • 不要忘记错误流: mvn clean test 2>err.txt 1>out.txt or mvn clean test > out.txt 2>&1 or mvn clean test 2>&1 | tee out.txt 重定向时,可以用less +F out.txt 来查看其他控制台的输出
  • 确实,重定向到日志文件可以解决这个问题。
  • 谢谢。另外,这很令人沮丧。
  • 控制台日志在整个构建过程中失败的非常奇怪的消息,应该有一种方法可以在运行测试期间关闭调试消息
【解决方案3】:

我有非常相似的问题 (Maven build and maven-failsafe-plugin - The forked VM terminated without properly saying goodbye) 并找到了三个对我有用的解决方案:

问题描述

问题在于 maven 插件 ma​​ven-surefire-plugin 仅在 2.20.1 和 2.21.0 版本中。我查了一下,你使用的是 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>

【讨论】:

  • 对我来说这个组合很有效,谢谢:org.apache.maven.pluginsmaven-surefire-plugin2.22.1 true
  • 感谢您,使用maven:3.6.0-jdk-10 Docker 映像并升级到maven-surefire-plugin 的版本3.0.0-M3 也为我解决了问题。
  • 关于解决方案 3:我们真的可以说忽略测试失败是一种解决方案吗?如果结果毫无意义,那么进行测试有什么意义?
  • 我刚刚将 maven-surefire-plugin 升级到 2.22.2 并且工作正常!
  • @Ulukai 如果您希望构建服务器在测试失败时将构建标记为“不稳定”而不是“失败”,则选项testFailureIgnore 会很方便。仅当您的构建系统配置为检查 JUnit 的 XML 文件时才有意义。
【解决方案4】:

Surefire FAQ 的这一部分可以帮助你:

Surefire 失败并显示消息“分叉的虚拟机在没有正确说再见的情况下终止”

Surefire 不支持任何时候调用 System.exit() 的测试或任何引用的库。如果他们这样做,它们与 surefire 不兼容,您可能应该向库/供应商提出问题。或者,分叉的 VM 也可能由于多种原因而崩溃,这也可能导致此问题发生。查找指示 VM 崩溃的经典“hs_err*”文件,或在测试执行时检查运行 maven 的日志输出。崩溃进程的一些“异常”输出可能会转储到控制台/日志。如果这种情况发生在 CI 环境中并且仅在运行一段时间后,您的测试套件很有可能会泄漏某种操作系统级别的资源,从而使每次运行的情况变得更糟。常规的操作系统级别监控工具可能会给您一些指示。

【讨论】:

  • 对我来说,这两个可能的原因都没有提到。相反,该项目为surefire插件指定了JVM参数,该插件已随着Java 11的更新而被弃用,并导致为运行测试而创建的JVM在启动时立即退出。
【解决方案5】:

截至今天(2018 年 10 月 30 日),我们注意到我们的构建在 Jenkins 中出现此错误。

该错误有点误导,需要查看target/surefire-reports/ 中的转储输出才能看到以下错误消息:

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

这导致我看到以下 SO 帖子,其中提到了 OpenJDK 181 中可能存在的错误:Maven surefire could not find ForkedBooter class

该帖子中的任何一个修复都解决了我的问题。具体来说,我使用了其中之一:

  1. 从在 docker 容器 maven:3.5.4-jdk-8 中构建切换到 maven:3.5.4-jdk-8-alpine
  2. 覆盖 Spring Boot 的类加载器详细信息:https://stackoverflow.com/a/50661649/1228408

【讨论】:

  • 谢谢。从 1.8.0_161-b12 切换到 11.0.1+13 在我们的案例中有所帮助。
  • 这是我在 Jenkins 上遇到的确切问题,现在已经解决。谢谢。
  • OP 有另一个错误消息:The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
  • @PetroCliff 我承认,当我说“我们注意到我们的构建在 Jenkins 中因此错误而中断”时,我也遇到了这个错误。然后我继续解释该错误具有误导性,实际错误位于surefire-reports
【解决方案6】:

关闭 maven-surefile-plugin 的 useSystemClassLoader 应该会有帮助

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

【讨论】:

  • 这是为我解决的问题。我一直在通过工件在从 gitlab 排队的 docker 图像上构建 maven。很难让一个有代表性的设置正常工作,在尝试了很多可靠设置的选项后,这个设置用 2.22.0 版本修复了它。
  • 必须为 Gitlab CI 中的每个 maven 作业添加此选项,但不知道为什么。
【解决方案7】:

刚刚遇到同样的问题,ubuntu上的java 8

然后遇到https://stackoverflow.com/a/53016532/1676516

这似乎是最近使用 java 8 https://issues.apache.org/jira/browse/SUREFIRE-1588 的surefire 插件版本 2.22.1 中的一个错误

通过本地 mvn 设置 ~/.m2/settings.xml 遵循建议的解决方法

<profiles>
    <profile>
        <id>SUREFIRE-1588</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <argLine>-Djdk.net.URLClassPath.disableClassPathURLCheck=true</argLine>
        </properties>
    </profile>
</profiles>

【讨论】:

  • 一个更新的版本 3.0.0-M1 的简单添加(例如)已经解决了这个问题。
【解决方案8】:

我今天遇到了同样的问题,对我来说,真正的问题在日志中进一步报告了消息Cannot use a threadCount parameter less than 1; 1 &gt; 0。 在surefire-plugin 配置中添加&lt;threadCount&gt;1&lt;/threadCount&gt; 时,其他错误消失了。

完整的插件配置:
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>2.18.1</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-testng</artifactId>
                    <version>2.18.1</version>
                </dependency>
            </dependencies>
            <configuration>
                <threadCount>1</threadCount>
            </configuration>
        </plugin>

...是的,出于向后兼容性的原因,我在这个测试框架中同时使用了 junit 和 testng。

【讨论】:

  • 这对我有用。我在我的项目中都使用了 JUnit 和 TestNG(出于完全相同的原因),并且设置 threadCount 有帮助。
【解决方案9】:

升级到 java 12 后我遇到了类似的问题,对我来说解决方案是更新 jacoco 版本&lt;jacoco.version&gt;0.8.3&lt;/jacoco.version&gt;

【讨论】:

  • 这确实是我在项目中遇到的问题。太糟糕了,这个答案不那么明显......
【解决方案10】:

2.22.2 版在分叉 JVM 方面存在实际问题。 使用 2.20 版 - 它就像一个魅力!


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

【讨论】:

  • 嗯,这确实有帮助!
  • 是的,v2.22.2maven:3.6-jdk-8-alpine 有问题。太烦人了!
【解决方案11】:

我遇到过一个案例,提供的答案都没有解决问题。它与一个恰好使用 log4j 和 SLF4J/logback 的遗留应用程序有关。

之前的情况:clean test 从 Eclipse 中启动时构建运行良好,但在命令行中启动时出现此错误。基于 CircleCI 构建的 CI 也运行良好。

我所做的:出于纯粹的猜测,配置一个正确的logback-test.xml 并降低日志记录的详细程度。瞧,我不再遇到此错误,我现在可以从命令行构建项目(以及发生此错误的模块)。

我的观点是使用或配置日志框架的方式可能是另一种解释

log4j 和 logback 之间真的有冲突吗?或者仅仅是测试产生的大量日志以某种方式溢出了命令行缓冲区?我不知道。这对我来说仍然是个谜。

【讨论】:

  • 支持,因为这可以真正解决/避免/回避问题。我在 Windows 上使用 slf4j 和 sl4j-simple,缓慢的输出也将我指向了这个方向。设置 System.setProperty(SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "warn");成功了。将 maven-surefire-plugin 降级到 2.18.1 也可以。
【解决方案12】:

使用 maven surefire 2.21.0 我解决了将 reuseForks 选项值从 true 更改为 false 的问题:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <reuseForks>false</reuseForks>
            </configuration>
        </plugin>
    </plugins>
</build>

我在构建下的整个配置部分如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <skip>false</skip>
                <reuseForks>false</reuseForks>
                <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
                <argLine>-Dfile.encoding=UTF-8</argLine>
                <useSystemClassLoader>false</useSystemClassLoader>
                <includes>
                    <!--Test* classes for the app testing -->
                    <include>**/directory/Test*.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

【讨论】:

    【解决方案13】:

    如果有人包含自定义 argLine 参数,您必须重新考虑,因为这很可能是您的内存分配问题的根源。

    例如(我曾经有过):

    <argLine>XX:MaxPermSize=4096m ${argLine}</argLine>
    

    现在我使用硬指定值:

    <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
    

    无论出于何种原因,与 Surefire 集成的应用程序(例如 Jacoco)都不会请求足够的内存来与构建时发生的测试共存。

    【讨论】:

      【解决方案14】:

      我在 Jenkins Docker 容器中也遇到了这个问题(尝试过 jenkins:lts、jenkins、jenkins:slim 和 jenkins:slim-lts。我不想遍历所有存储库并更新每个项目的 pom ,所以我只是将 disableClassPathURLCheck 添加到 maven 命令行调用中:

      mvn test -DargLine="-Djdk.net.URLClassPath.disableClassPathURLCheck=true"
      

      【讨论】:

        【解决方案15】:

        我的场景是

        • 我的测试有很多日志输出(我的意思是很多!)
        • Surefire 插件 v2.22.2
        • 该错误仅发生在 IDE 内部,而不是在从命令行执行 mvn 命令时发生。
        • 没有任何来自 Surefire 插件的 .dump 文件或来自 Java 二进制文件的传统 hs_err 崩溃文件的迹象。

        有两件事一直是我的解决方案(它们是替代品):

        1. 不要使用分叉:设置 Surefire 插件属性 forkcount = 0
        2. 增加 Surefire 插件属性 forkedProcessExitTimeoutInSeconds 从 30 秒到 300 秒。 plugin documentation 表示如果遇到此超时,您将看到错误消息 There was a timeout in the fork。我没有看到此类错误消息,但它始终如一地解决了增加此超时值的问题。

        您可能希望使用解决方案 (2),因为分叉是可取的。

        为什么?

        我的理论是,如果有大量日志输出,那么在 fork 关闭时仍然需要进行大量处理(特别是如果您在捕获输出并可能在其窗口中使用内存映射文件的 IDE 中运行内容)。简而言之:在测试完成时,仍有大量文本等待转发到您的 IDE。看来 30 多岁根本不够用。

        这也解释了为什么有些开发者会看到问题,而有些则看不到。测试完成时还剩下多少输出处理可能是 cpu 功率、磁盘速度等的函数。

        如果我在这方面是对的 - 无法证明 - 那么所有建议,如重定向日志输出和降低日志记录级别都是 IMO 治疗症状,而不是原因。

        【讨论】:

        • 我很惊讶这个答案没有得到更多的支持。许多评分较高的解决方案是指将输出重定向到对我有用的日志文件。问题是为什么?我注意到测试套件运行输出到日志文件时要快一点。这导致我寻找一些超时问题和您在此处提供的相同解决方案。但是,我发现没有必要将分叉计数设置为 0。
        • 设置forkcount = 0 对我来说也是最好的解决方案。特别是在 SpringBootTests 中使用缓存的 SpringContext,这在我的情况下使测试更快
        【解决方案16】:

        在 JDK 1.8.0_65

        上使用 Jacoco 插件运行 mvn 命令时遇到类似问题
        [INFO]
        A fatal error has been detected by the Java Runtime Environment:
        
        JRE version: Java(TM) SE Runtime Environment (8.0_65-b17) (build 1.8.0_65-b17).........
        Problematic frame:
        PhaseIdealLoop::build_loop_late_post(Node*)+0x144
        ............
        ............
        [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19:test (default-test) on project 
        
         The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
        

        JDK https://bugs.openjdk.java.net/browse/JDK-8081379 有一个 bug

        解决方案是使用参数运行 mvn clean install -XX:-UseLoopPredicate

        或者只是对 JDK 进行更新(我认为更新的次要版本可以)

        【讨论】:

          【解决方案17】:

          这似乎是某些 Windows 机器上的线程同步问题。如果您在使用 Windows 时遇到此问题,请尝试将输出重定向到文件:mvn clean install &gt; output.txt

          【讨论】:

          • 你有这个问题的来源吗?
          • 它是特定于机器的。另一台机器上的相同仓库/分支不会显示问题。严重陈旧、缓慢和受限的机器更倾向于表现出这种行为。大量的junit似乎也表现出这种行为。我无法分享我的一个显示这一点的存储库,因为它们位于私人和受限空间中。如果我遇到一个公开的,我会把它放在这里。
          • 谢谢,那太好了:)
          【解决方案18】:

          您需要检查您的机器是 64 位还是 32 位。如果您的机器是 32 位,那么您的内存参数不应超过 4096,即使它应该低于 4 GB。 但是如果你的机器是 64 位的,那么安装 Java 64 位并在 mvn.bat 中提供指向 Java 64 位安装的 JAVA_HOME。

          【讨论】:

            【解决方案19】:

            我最近在使用 Bamboo 构建容器化 jar 应用程序时遇到了这个错误:

            org.apache.maven.surefire.booter.SurefireBooterForkException: 分叉的虚拟机没有正确说再见就终止了

            经过数小时的研究,我修复了它。我认为在这里分享我的解决方案会很有用。

            因此,每次竹子在 docker 容器中为 java 应用程序运行 mvn clean package 命令时都会发生错误。我不是 Maven 专家,但问题在于 spring-boot 中包含的 Surefire 和 Junit4 插件作为 Maven 依赖项。

            要修复它,您需要将 Junit4 替换为 Junit5 并覆盖您 pom.xml 中的 Surefire 插件。

            1.inside spring boot 依赖插入排除:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <!-- FIX BAMBOO DEPLOY>
                <exclusions>
                    <exclusion>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                    </exclusion>
                </exclusions>
                <!---->
            </dependency>
            

            2。添加新的 Junit5 依赖项:

            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>5.1.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <version>5.1.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-launcher</artifactId>
                <version>1.1.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-runner</artifactId>
                <version>1.1.0</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-surefire-provider</artifactId>
                <version>1.1.0</version>
                <scope>test</scope>
            </dependency>
            

            3。在插件部分插入新插件

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <dependencies>
                    <dependency>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>junit-platform-surefire-provider</artifactId>
                        <version>1.1.0</version>
                    </dependency>
                    <dependency>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>junit-jupiter-engine</artifactId>
                        <version>5.1.0</version>
                    </dependency>
                </dependencies>
            </plugin>
            

            这应该足以修复竹制建筑。不要忘记还转换所有 Junit4 测试以支持 Junit5。

            【讨论】:

              【解决方案20】:

              我在 Java 8 和 spring boot 5.2.7 中遇到了同样的问题(包括插件,开箱即用)。插件的版本是默认的(2.22.2)。就我而言,问题仅发生在团队中的某些机器上,而在其他机器上一切都很好。我想这与 maven 检测到的核心数量有关。

              我用这些设置修复了它:

                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-surefire-plugin</artifactId>
                          <configuration>
                              <reuseForks>false</reuseForks>
                          </configuration>
                      </plugin>
              

              我尝试了许多建议的方法,但在我的情况下没有任何效果。

              此解决方案的唯一缺点是禁用分叉的重用,并且现在测试运行速度较慢。

              【讨论】:

              • 这不能解决问题
              • 它确实解决了我遇到的问题。然而,这可能不是一个通用的解决方案。对于许多类似的问题,似乎引发了相同的异常。
              • 好吧,我不再收到错误消息,但我的构建时间至少是原来的 10 倍。我通过将 logging.level.root 设置为 OFF 而不是 DEBUG 来解决我的问题。设置更具体的日志记录级别以在需要的地方进行调试。
              【解决方案21】:

              我最近在 JHipster 6.10.5 使用 spring-boot 2.2.7.RELEASE 和 maven surefire plugin 3.0.0-M4 生成的应用程序中遇到了同样的问题。这是由于测试日志过长而导致的超时。通过将以下配置参数添加到 pom.xml(在 pluginManagement 下)中的 maven-surefire-plugin 来解决:

              1200

              https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#forkedProcessExitTimeoutInSeconds

              【讨论】:

              • 这为我解决了。我的测试中有很多日志输出。 This FAQ 表示如果出现此超时,您将看到错误消息 There was a timeout in the fork。我没有看到这样的消息,但它始终如一地解决了我的问题以增加 forkedProcessExitTimeoutInSeconds 值。诡异的。我正在使用surefire-plugin v2.22.2。
              【解决方案22】:

              测试中使用的分叉 JVM 内存不足。 解决方案是禁用分叉 JVM 并在主 JVM 上运行测试以确保您有足够的内存或传递参数以增加分叉 JVM 的内存

              查看answer中的解决方案

              【讨论】:

                【解决方案23】:

                您可以使用以下命令。因为您的单元测试需要分叉。关于您在单元测试中使用线程的问题。

                mvn test -DforkCount=2
                

                我希望。很有帮助。

                【讨论】:

                • 这在我的情况下有效
                • 很好,我为你感到高兴。
                【解决方案24】:

                在运行 JAVA = 1.8 的 Windows 10 环境中尝试编译设置为 1.7 的 maven 项目时遇到了同样的问题。

                我通过将 java 版本从 1.7 更改为 1.8 来解决它,如下所示。

                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                    </configuration>
                  </plugin>
                

                【讨论】:

                  【解决方案25】:

                  我对这个问题的解决方案是关闭该死的 chrome 浏览器,它阻塞了我的电脑内存?

                  【讨论】:

                    【解决方案26】:

                    你可以设置java选项

                    SET JAVA_OPTS='-Xmx1024m' XX:+UseLoopPredicate

                    mvn clean install

                    【讨论】:

                      【解决方案27】:

                      在 pom.xml 中设置它对我有用。 但是您应该查看文档以了解其他解决方法 https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html

                             <plugin>
                      
                                  <groupId>org.apache.maven.plugins</groupId>
                                  <artifactId>maven-surefire-plugin</artifactId>
                                  <configuration>
                                      <!--these strange settings fixes a chrash and dumpstream from surefire when run from command line
                                          Caused by: java.lang.ClassNotFoundException: org.apache.maven.surefire.booter.ForkedBooter
                                      -->
                                      <useSystemClassLoader>true</useSystemClassLoader>
                                      <useManifestOnlyJar>false</useManifestOnlyJar>
                                  </configuration>
                              </plugin>
                      

                      【讨论】:

                        【解决方案28】:

                        我遇到了同样的问题,并通过使用 Oracle 的 Java 8 而不是 Openjdk 的 Java 10 解决了

                        【讨论】:

                          【解决方案29】:

                          我在 MacOS 上在端口 5005 上远程调试 Selenium 测试代码时也遇到了这个问题。这个问题原来是由仍在运行的剩余的surefire-forked-JVM 引起的。 Eclipse IDE 终端的日志输出未显示地址已在使用中 的潜在问题。只有当我在 Eclipse 实际尝试运行的 MacOS 终端中运行相同的命令时,才会显示日志消息:

                          /bin/sh -c cd /path/to/your/project/directory && /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/jre/bin/java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar /path/to/target/surefire/surefirebooter230340673926465933.jar /path/to/target/surefire 2019-06-28T10-50-02_140-jvmRun1 surefire6455775580414993159tmp surefire_02461993428448591420tmp

                          杀死流氓 JVM 实例(在 Activity Monitor 中查找 java 进程名称)解决了这个问题。顺便说一句,我正在运行surefire插件版本2.21.0,打开jdk 8(v1.8.0_212)没有问题。请注意,所有路径都将特定于您的构建环境,可能还有端口(地址=5005)。

                          【讨论】:

                            【解决方案30】:

                            我将surefire插件更新为以下内容,这解决了我的问题:

                                       <plugin>
                                            <groupId>org.apache.maven.plugins</groupId>
                                            <artifactId>maven-surefire-plugin</artifactId>
                                            <version>2.22.2</version>
                                            <configuration>
                                                <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
                                                <forkCount>1</forkCount>
                                                <reuseForks>true</reuseForks>
                                                <runOrder>alphabetical</runOrder>
                                            </configuration>
                                        </plugin>
                            

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2014-01-05
                              • 1970-01-01
                              • 1970-01-01
                              • 2014-08-15
                              • 2018-03-31
                              相关资源
                              最近更新 更多