当前位置: 首页 > 知识库问答 >
问题:

Maven surefire插件使java 11上的jvm崩溃(通过直接写入分叉jvm 1中的本地流而损坏了STDOUT)

梁丘权
2023-03-14

使用Java11运行maven构建时,构建在运行测试时发出以下警告:

[WARNING] Corrupted STDOUT by directly writing to native stream in forked JVM 1. See FAQ web page and the dump file /home/thomas/code/irdeto-control/fps-license-service/fps/target/surefire-reports/2019-04-11T14-05-32_318-jvmRun1.dumpstream

...之后是构建失败后的以下stderr输出:

$ cat error.message 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project fps: There are test failures.
[ERROR] 
[ERROR] Please refer to /home/user/code/employer-control/fps-license-service/fps/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 /home/user/code/employer-control/fps-license-service/fps && /usr/lib/jvm/jdk-11.0.2/bin/java '-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.8.0/org.jacoco.agent-0.8.0-runtime.jar=destfile=/home/user/code/employer-control/fps-license-service/fps/target/jacoco.exec,excludes=com.employer.rights.fairplay.*' -jar /home/user/code/employer-control/fps-license-service/fps/target/surefire/surefirebooter7853689441541829546.jar /home/user/code/employer-control/fps-license-service/fps/target/surefire 2019-04-11T14-05-32_318-jvmRun1 surefire11275213325677189658tmp surefire_01035200394006888746tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 134
[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 /home/user/code/employer-control/fps-license-service/fps && /usr/lib/jvm/jdk-11.0.2/bin/java '-javaagent:/home/user/.m2/repository/org/jacoco/org.jacoco.agent/0.8.0/org.jacoco.agent-0.8.0-runtime.jar=destfile=/home/user/code/employer-control/fps-license-service/fps/target/jacoco.exec,excludes=com.employer.rights.fairplay.*' -jar /home/user/code/employer-control/fps-license-service/fps/target/surefire/surefirebooter7853689441541829546.jar /home/user/code/employer-control/fps-license-service/fps/target/surefire 2019-04-11T14-05-32_318-jvmRun1 surefire11275213325677189658tmp surefire_01035200394006888746tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 134
[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)
# Created at 2019-04-11T14:05:32.824
Corrupted STDOUT by directly writing to native stream in forked JVM 1. Stream 'FATAL ERROR in native method: processing of -javaagent failed'.
java.lang.IllegalArgumentException: Stream stdin corrupted. Expected comma after third character in command 'FATAL ERROR in native method: processing of -javaagent failed'.
        at org.apache.maven.plugin.surefire.booterclient.output.ForkClient$OperationalData.<init>(ForkClient.java:507)
        at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.processLine(ForkClient.java:210)
        at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.java:177)
        at org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.java:88)
        at java.base/java.lang.Thread.run(Thread.java:834)

也就是说,与大多数在最新版本的插件中解决的问题不同,在surefire和JVM的最新版本中,这个问题似乎再次抬头。

欢迎任何解决方案或工作方法。我正在使用以下版本:

Apache Maven 3.5.3(3383C37E1F9E9B3BC3DF5050C29C8AFF9F295297;2018-02-24T20:49:05+01:00)

maven-surefire-plugin.version:2.18

共有1个答案

乐正浩博
2023-03-14

不是修复,而是解决办法,不要异步地并发运行测试:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>${maven-surefire-plugin.version}</version>
      <configuration>
        <forkCount>0</forkCount>
      </configuration>
    </plugin>
 类似资料:
  • 我的JUnit测试在通过Maven和Surefire插件(版本信息如下)运行时失败了。我看到错误消息: 如果使用FileDescriptor.out或JVM打印GC摘要,则会出现此警告消息。 在这种情况下,警告被打印为“通过直接写入分叉JVM中的本机流而损坏的STDOUT”,并且可以在Reports目录中找到转储文件。 如果启用了调试级别,则控制台中会出现损坏流的消息。 更新:下面请求的配置信息。

  • 我的JUnit测试在通过Maven和Surefire插件(版本信息如下)运行时失败了。我看到错误消息: 如果使用FileDescriptor.out或JVM打印GC摘要,则会出现此警告消息。 在这种情况下,警告被打印为“通过直接写入分叉JVM中的本机流而损坏STDOUT”,并且可以在Reports目录中找到转储文件。 如果启用了调试级别,则会在控制台中显示损坏流的消息。 那么,我该如何解决这个问题

  • 问题内容: 通过Maven和Surefire插件运行它们时,我的JUnit测试失败(下面的版本信息)。我看到错误消息: FAQ页面指出了一些可能的原因,但是我看不到如何使用此信息来开始解决此问题: 通过直接在派生的JVM中写入本机流而损坏了STDOUT 如果您的测试使用打印到STDOUT的本机库,则会出现此警告消息,因为该库损坏了插件使用的通道,以便将具有测试状态的事件传输回Maven进程。如果您

  • 在JavaAccessBridge屏幕捕获中发现以下错误。 此错误随机发生。请告诉我这个错误的原因?请建议我如何修理它? > --------------T H R E A D----------- 当前线程(0x05D31800):JavaThread“thread-6”后台进程[_thread_in_java,ID=16140,堆栈(0x04D60000,0x04DB0000)] SIGINF

  • 我有一个在android平板上运行的跟踪器应用程序。我注意到有些平板电脑会时不时地重新启动。 当我调查这个问题时,发现我得到了“检测到堆栈损坏”错误,然后几毫秒后android VM崩溃。 这些崩溃每5分钟到20分钟发生一次,没有其他模式,然后跟踪应用程序运行和使用GPS和3G。 以下是logcat输出:

  • 不久前,我打开电脑处理我一直在开发的Minecraft mod,但我没有像往常一样运行,而是得到了这个例外: 在尝试了几个小时之后,我意识到我的代码没有问题。我试着运行我制作的其他java程序。一个简单的Hello World程序工作了,但我的LWJGL游戏也出现了同样的异常,我使用的任何程序都因文件未找到而崩溃。IO程序也适用于通过GitHub从事同一项目的其他人。 来自IntelliJ的日志太