Java >> Java-zelfstudie >  >> Tag >> maven

Surefire Maven-plug-in:beschadigde STDOUT door rechtstreeks naar native stream te schrijven in gevorkte JVM

Loop tegen hetzelfde probleem aan tijdens het migreren van een project van JAVA 8 naar JAVA 11, het upgraden van de jacoco-plug-in van 0.8.1 naar 0.8.4 deed het werk.

Het analyseren van maven-afhankelijkheden, zien waar jacoco vandaan wordt gehaald en vervolgens de versie repareren, zou het probleem moeten oplossen.


Voor mij was het het updaten van de failsafe plug-in van 2.22.0 naar 2.22.2


Ik kwam dit probleem tegen toen ik mijn Junit-tests uitvoerde met een aangepaste Runner. Als ik uitvoer naar System.out of System.err in mijn aangepaste hardloper of in mijn testklasse zou deze exacte waarschuwing verschijnen. In mijn geval werd het probleem niet veroorzaakt door een oudere Jacoco-versie. Het updaten van de trefzekere plug-in naar versie 2.22.2 of de recentere 3.0.0-M4 loste het probleem niet op.

Volgens het Jira-probleem SUREFIRE-1614 zal het probleem worden opgelost in de 3.0.0-M5-release van de maven-surefire-plug-in (niet vrijgegeven vanaf 21 mei 2020).

Bijwerken De Maven Surefire-plug-in versie 3.0.0-M5 is nu vrijgegeven. In je pom.xml u kunt het volgende doen:

    <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>

Oorspronkelijk antwoord

Als u niet kunt wachten op de release van de 3.0.0-M5-plug-in, kunt u de "SNAPSHOT"-versie van de plug-in gebruiken. Het heeft het probleem voor mij opgelost. U moet een specifieke instelling in de plug-in inschakelen, zodat de plug-in TCP gebruikt in plaats van de standaarduitvoer/fout om de gebeurtenissen te verkrijgen die in uw tests naar voren zijn gekomen. Configuratiewijzigingen hieronder:

In mijn 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>


Java-tag