it-swarm.com.de

Maven surefire konnte die ForkedBooter-Klasse nicht finden

Ich komme gerade zu einem neuen Projekt und versuche, unseren Quellcode zu kompilieren. Gestern hat alles gut funktioniert, aber heute ist eine andere Geschichte.

Jedes Mal, wenn ich mvn clean install auf einem Modul laufe, stürzt das System nach dem Erreichen der Tests in einem Fehler ab:

[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ recorder ---
[INFO] Surefire report directory: /lhome/code/recorder/target/surefire-reports
[INFO] Using configured provider org.Apache.maven.surefire.junitcore.JUnitCoreProvider
[INFO] parallel='none', perCoreThreadCount=true, threadCount=0, useUnlimitedThreads=false, threadCountSuites=0,     threadCountClasses=0, threadCountMethods=0, parallelOptimized=true

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Error: Could not find or load main class org.Apache.maven.surefire.booter.ForkedBooter

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

und später:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project recorder: Execution default-test of goal org.Apache.maven.plugins:maven-surefire-plugin:2.18.1:test failed: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?

Ich arbeite auf Debian 9 (Stretch) 64-Bit mit OpenJDK 1.8.0_181, Maven 3.5.4 und arbeite hinter meinem Firmenproxy, den ich in meinem ~/.m2/settings.xml konfiguriert habe.

Eine seltsame Sache ist, dass die neueste Surefire-Version 2.22.1 ist, wenn ich mich richtig erinnere. Ich habe versucht, die Plugin-Version anzugeben, aber sie wird nicht aktualisiert. Andernfalls gibt es keine Plugin-Versionsspezifikation in einem POM (Parent, Grand-Parent oder diesem).

Ich habe es geschafft, Maven zu zwingen, die Surefire-Version auf die neueste zu ändern, aber jetzt ist es noch schlimmer:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[...]

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project recorder:     There are test failures.
[ERROR]
[ERROR] Please refer to /lhome/code/recorder/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 /lhome/code/recorder/ && /usr/lib/jvm/Java-8-openjdk-AMD64/jre/bin/Java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[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 /lhome/code/recorder/ && /usr/lib/jvm/Java-8-openjdk-AMD64/jre/bin/Java     '-javaagent:/lhome1/johndoe/.m2/repository/org/jacoco/org.jacoco.agent/0.7.4.201502262128/org.jacoco.agent-0.7.4.201502262128-runt    ime.jar=destfile=/lhome/code/recorder/target/jacoco.exec,append=true,includes=esa/*,excludes=**/api/**/*.class' -jar     /lhome/code/recorder/target/surefire/surefirebooter7426165516226884923.jar /lhome/code/recorder/target/surefire     2018-10-26T16-16-12_829-jvmRun1 surefire1721866559613511529tmp surefire_023400764142672144tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[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)
[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:56)
[ERROR]     at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:128)
[ERROR]     at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:305)
[ERROR]     at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:192)
[ERROR]     at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:105)
[ERROR]     at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:954)
[ERROR]     at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:288)
[ERROR]     at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:192)
[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)
186
Sylordis

Um dies zu beheben (im Jahr 2018), aktualisieren Sie Ihr openjdk auf die neueste Version, mindestens 8u191-b12. Falls dieses Problem im Jahr 2020 erneut auftritt, ist es wahrscheinlich, dass das Standardverhalten von openjdk und Sie geändert wurden muss dann das maven surefire plugin aktualisieren.

Dies war ein jetzt behobenFehler im openjdk-8-Paket (Verhalten weicht signifikant vom Upstream ab, ohne dass der Upstream-Patch zurückgesetzt wurde, um eine Sicherheitsüberprüfung wieder zu deaktivieren). dass Sie gerade aufgerüstet haben. Aber es ist auch ein Fehler im surefire-Plugin, SUREFIRE-1588, der angeblich in surefire 3.0.0-M1 behoben wurde : Es verwendet anscheinend absolute Pfade an einem Ort, an dem Java zukünftig verwendet wird Erlaube nur relative Pfadnamen (und Debian hat das zukünftige Verhalten bereits aktiviert).

Die Paketversion 8u181-b13-2 lautet:

  • Wenden Sie die Patches des Sicherheitsupdates 8u191-b12 an.

Beachten Sie, dass 191-b12! = 181-b13. Die 191-b12-Sicherheitspatches waren erst vor wenigen Tagen verfügbar, und die Betreuer wollten sie anscheinend schnell zu Ihnen bringen. Eine vollständige Aktualisierung auf 191-b12 wird wahrscheinlich zusätzliche Tests erfordern (gut, also sollte dieser Upload anscheinend vorhanden sein).

Es gab mehrere Workaounds:

  1. Sie können stattdessen das vorheriges Paket von snapshots.d.o installieren. Nach dem Downgrade können Sie die fehlerhafte Version (wenn Sie aptitude verwenden und nicht apt verwenden) mit Sudo aptitude forbid-version openjdk-8-jre-headless verbieten. Für reguläre "apt" habe ich keinen ähnlichen verbotenen Mechanismus gesehen, daher müssten Sie wahrscheinlich apt pinning verwenden, um zu verhindern, dass dieses Upgrade erneut installiert wird (oder Sie fahren einfach weiter herunter, ich hoffe, dass dies bald behoben wird).
  2. Entsprechend der Fehlerverfolgung sollte auch das Festlegen der Eigenschaft -Djdk.net.URLClassPath.disableClassPathURLCheck=true mit einer der üblichen Methoden (z. B. Java_FLAGS) hilfreich sein. Aber ich habe das nicht selbst bestätigt. Sie können anscheinend sogar fügen Sie die Problemumgehung zu ~/.m2/settings.xml hinzu , um sie für alle Ihre Maven-Builds problemlos zu aktivieren.

Wie Sie sehen, Bug Tracking Works, wurde das Problem eingegrenzt und ein festes Paket ist verfügbar und eine neue Version des Surefire-Plugins wird in Kürze verfügbar sein!

228
Erich Schubert

Ich habe diese Problemumgehung gefunden und meine Tests korrigiert: Konfigurieren Sie den maven-surefire-plugin so, dass er den System-Classloader nicht verwendet.

47
user3090935

Setzen Sie useSystemClassloader auf false:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>

Wenn Sie nicht von einem Elternteil erben, für das eine Version definiert ist (z. B. der Spring Boot-Starter), müssen Sie dies ebenfalls definieren.

44
Markoorn

Ich habe eine andere Problemumgehung. Legen Sie die Umgebungsvariable _Java_OPTIONS fest. Ich habe dies für unsere TeamCity-Build-Agenten verwendet, und jetzt laufen unsere Builds einwandfrei.

_Java_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true
36
Michael

Ich habe eine gezieltere Variante einer der obigen Problemumgehungen in JIRA veröffentlicht. Zu ~/.m2/settings.xml hinzufügen:

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

Ich hatte dieses Problem in meinem GitLab CI-Build, das maven:3.5.4-jdk-8 Docker-Image verwendete.

Das Ändern in maven:3.5.4-jdk-8-Alpine hat das Problem behoben.

8
brunobastosg

Ich folgte diesem Link https://maven.Apache.org/surefire/maven-surefire-plugin/examples/class-loading.html und fügte das folgende Plugin in pom.xml hinzu.

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
        <configuration>
          <useSystemClassLoader>false</useSystemClassLoader>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
7

Für Ubuntu: Installieren Sie die neueste Version. Dieser Fehler wurde behoben

Sudo apt-get update ; Sudo apt-get dist-upgrade -y

Installieren Sie die letzte funktionierende Version (ohne Sicherheitspatches) ohne den Fehler.

Sudo apt-get install openjdk-8-jdk-headless=8u181-b13-1 openjdk-8-jdk=8u181-b13-1  openjdk-8-jre=8u181-b13-1  openjdk-8-jre-headless=8u181-b13-1 openjdk-8-source=8u181-b13-1

Wenn Sie diese Version verpasst haben, verwenden Sie die vorherige Version:

Sudo apt-get install openjdk-8-jdk-headless=8u162-b12-1 openjdk-8-jdk=8u162-b12-1  openjdk-8-jre=8u162-b12-1  openjdk-8-jre-headless=8u162-b12-1 openjdk-8-source=8u162-b12-1

Verwenden Sie dann entweder pinning oder achten Sie darauf, dass Sie die defekte Version nicht installieren.

Die Verwendung von -Djdk.net.URLClassPath.disableClassPathURLCheck=true hat für mich nicht funktioniert, wo auch immer ich diese Konfiguration vorgenommen hatte. Irgendwo in meinen Integrationstests wurde es immer ohne die alte Java-Version beendet.

Wie von Erich erwähnt, ist es ein Fehler im Debian-Paket, der zu streng ist 911925 und das Surefire-Plugin nicht nach den neuen Regeln SUREFIRE-1588 .

4
flob

Der obige Vorschlag zum Setzen der Eigenschaft "-Djdk.net.URLClassPath.disableClassPathURLCheck = true" hat für mich NICHT funktioniert, aber das Festlegen der folgenden Einstellungen funktioniert in Ordnung:

-DforkCount=0
4
farid g.

Bei der Verwendung von GitLab CI/CD mit 3.6.0-jdk-8 image half nur die unten angegebene Eigenschaft (ohne pom.xml zu ändern).

-Dsurefire.useSystemClassLoader=false
4
Grzes

Für diejenigen, die auf GitLab CI nach einer Antwort zu Docker Maven: 3.5.x-jdk-8 suchen, siehe diese GitHub-Ausgabe .

Es scheint, dass ein 3.5.4-jdk-8-Image zu einem Upgrade auf eine untergeordnete Java-Version geführt hat, was sich irgendwie auf den Surefire-Mechanismus auswirkt.

Durch das Zurücksetzen auf 3.5.3-jdk-8 image wurde dieses Problem auf meinem GitLab CI-Server behoben, der Java 1.8-Code mit Surefire 2.20.1 erstellt.

4
Simon Diemert

Ich habe vor kurzem Maven-Job bei Jenkins eingerichtet und bin in das gleiche Problem geraten. Ich nahm den Vorschlag an, die Java-Umgebungsvariable zu ändern und zu bestätigen, dass das Problem behoben wurde. So habe ich es getestet.

Wird zum Benutzer "jenkins" und ändert den Ordner in den Projektnamen des Arbeitsbereichs, den Sie für den Job eingerichtet haben.

 $ _Java_OPTIONS=-Djdk.net.URLClassPath.disableClassPathURLCheck=true mvn clean install -U

 $ lsb_release -rd
 Description:   Ubuntu 16.04.5 LTS
 Release:   16.04

 $ mvn -v
 Apache Maven 3.3.9
 Maven home: /usr/share/maven
 Java version: 1.8.0_181, vendor: Oracle Corporation
 Java home: /usr/lib/jvm/Java-8-openjdk-AMD64/jre
 Default locale: en_US, platform encoding: UTF-8
 OS name: "linux", version: "4.4.0-131-generic", Arch: "AMD64", family: "unix"

Ich habe der Junit-Jupiter-Engine Abhängigkeit hinzugefügt, und es hat funktioniert.

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.4.0</version>
        </dependency>
    </dependencies>
</plugin>
0
Adi Baboianu

Ich habe das JDK in den Repositorys deinstalliert:

$ Sudo apt purge openjdk-8-jdk

$ Sudo apt autoremove

Dann habe ich die Umgebungsvariable Java_HOME gelöscht. Meines war in meiner .bashrc eingestellt.

Dann habe ich es über SDKMAN neu installiert:

$ sdk install Java 8.0.181-zulu

Von ihrer Seite :

SDKMAN! ist ein Tool zum Verwalten paralleler Versionen mehrerer Software Development Kits auf den meisten Unix-basierten Systemen. Es bietet eine praktische Befehlszeilenschnittstelle (Command Line Interface, CLI) und eine API zum Installieren, Wechseln, Entfernen und Auflisten von Kandidaten.

Um andere Versionen des zu installierenden JDK anzuzeigen, verwenden Sie Folgendes:

$ sdk list Java
0
jumpnett

Ich war mit demselben Problem mit gitlab ci konfrontiert. Das Ändern des Maven-Bildes von maven:3-jdk-8 in maven:3.6.0-jdk-8-Alpine scheint das Problem zu beheben. Übrigens habe ich auch mit maven:3.6.0-jdk-8 getestet, aber es hat auch nicht funktioniert.

0
mndeveci