Surefire Maven plugin: “Corrupted STDOUT by directly writing to native stream in forked JVM”

前端 未结 7 1606
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-01 01:23

My JUnit tests are failing when running them through Maven and the Surefire plugin (version information below). I see the error message:

Corrupted STDOUT by direc         


        
相关标签:
7条回答
  • 2021-02-01 01:37

    What solved it for me is upgrading maven surefire plugin to 2.22.2

    0 讨论(0)
  • 2021-02-01 01:39

    The newer Surefire plugin versions are completely buggy and broken. for me (tested all the way up to Java 12) the only solution was to stick with 2.20.

    Don't use 2.20.1 either, that failed with a NPE, although maybe it is specific to particular tests, but I don't have time to investigate that.

    0 讨论(0)
  • 2021-02-01 01:40

    For me it was updating the failsafe plugin from 2.22.0 to 2.22.2

    0 讨论(0)
  • 2021-02-01 01:46

    Run in the same problem while migrating project from JAVA 8 to JAVA 11, upgrading jacoco-plugin from 0.8.1 to 0.8.4 did the job.

    Analysing maven dependencies, seeing from where jacoco is pulled and then fixing the version should solve the issue.

    0 讨论(0)
  • 2021-02-01 01:52

    I was getting this error when running Maven build in Intelij Idea. I had a couple of projects open in separate windows and had other strange errors in a different project.

    Solved for me by closing all the Intellij Idea windows and re-opening the project. No dependencies versions were changed.

    0 讨论(0)
  • 2021-02-01 01:55

    I was running into this issue when running my Junit tests using a custom Runner. If I made any output to System.out or System.err in my custom runner or in my test class, this exact warning would show up. In my case the problem was not caused by some older Jacoco version. Updating the surefire plugin to version 2.22.2 or the more recent 3.0.0-M4 did not solve the issue.

    According to the Jira issue SUREFIRE-1614, the problem will be fixed in the 3.0.0-M5 release of the maven-surefire-plugin (not released as of May 21st 2020).

    Update The Maven Surefire plugin version 3.0.0-M5 has now been released. In your pom.xml you can do the following:

        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0-M5</version>
          <configuration>
            <!-- Activate the use of TCP to transmit events to the plugin -->
            <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
          </configuration>
        </plugin>
    

    Original answer

    If you cannot wait for the release of the 3.0.0-M5 plugin, you can use the "SNAPSHOT" version of the plugin. It did fix the issue for me. You have to enable some specific setting in the plugin so that the plugin uses TCP instead of the standard output/error to obtain the events raised in your tests. Configuration changes below:

    In my pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
    ...
      <!-- Add the repository to download the "SNAPSHOT" of maven-surefire-plugin -->
      <pluginRepositories>
        <pluginRepository>
          <id>apache.snapshots</id>
          <url>https://repository.apache.org/snapshots/</url>
        </pluginRepository>
      </pluginRepositories>
    
      <build>
        <pluginManagement>
          <plugins>
        ...
        <artifactId>maven-surefire-plugin</artifactId>
          <!-- Use the SNAPSHOT version -->
          <version>3.0.0-SNAPSHOT</version>
          <configuration>
            <!-- Activate the use of TCP to transmit events to the plugin -->
            <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
          </configuration>
        </plugin>
    
    
    0 讨论(0)
提交回复
热议问题