En venant récemment à un nouveau projet, j'essaye de compiler notre code source. Tout a bien fonctionné hier, mais aujourd'hui, c'est une autre histoire.
Chaque fois que j'exécute mvn clean install
un module, une fois les tests atteints, il se bloque en une erreur:
[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
et plus tard:
[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?
Je cours sur Debian 9 (Stretch) 64 bits avec OpenJDK 1.8.0_181, Maven 3.5.4, travaillant derrière le proxy de mon entreprise que j'ai configuré dans mon ~/.m2/settings.xml
.
Chose étrange, la dernière version de Surefire est la 2.22.1 si je me souviens bien. J'ai essayé de spécifier la version du plugin, mais elle n'est pas mise à jour, sinon il n'y a aucune spécification de version de plugin dans aucun POM (parent, grand-parent ou celui-ci).
J'ai réussi à forcer Maven à changer la dernière version de Surefire, mais maintenant c'est encore pire:
[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)
la source
dependencyManagement
section deRéponses:
Pour y remédier (en 2018), mettez à jour votre openjdk vers la dernière version, au moins 8u191-b12. Au cas où ce problème réapparaîtrait en 2020, il est probable que le comportement par défaut de openjdk ait été modifié, et vous devrez ensuite mettre à jour le plugin maven surefire.
Ce fut maintenant un fixe bug dans le paquet openjdk-8 (le comportement s'écarte de manière significative sans besoin; manque le correctif en amont pour revenir à la désactivation d'un contrôle de sécurité) que vous venez de mettre à niveau. Mais c'est aussi un bug dans le plugin surefire, SUREFIRE-1588 , censé être corrigé dans surefire 3.0.0-M1 : il utilise apparemment des chemins absolus dans un endroit où Java n'autorisera à l'avenir que des noms de chemins relatifs (et Debian a activé le comportement futur déjà).
La version du package 8u181-b13-2 indique:
Notez que 191-b12! = 181-b13. Les correctifs de sécurité 191-b12 venaient de sortir il y a quelques jours, et apparemment les responsables voulaient vous les obtenir rapidement. La mise à jour complète vers 191-b12 nécessitera probablement des tests supplémentaires (enfin, devrait donc avoir ce téléchargement, apparemment).
Il y avait eu plusieurs solutions:
apt
)sudo aptitude forbid-version openjdk-8-jre-headless
. Pour les "apt" réguliers, je n'ai pas vu de mécanisme d'interdiction similaire, vous devrez donc probablement utiliser l'épinglage apt pour empêcher la réinstallation de cette mise à niveau (ou vous continuez simplement à rétrograder, j'espère que cela sera bientôt résolu).-Djdk.net.URLClassPath.disableClassPathURLCheck=true
avec l'une des méthodes habituelles (par exemple,JAVA_FLAGS
) devrait également aider. Mais je ne l'ai pas vérifié moi-même. Vous pouvez apparemment même ajouter la solution de contournement à~/.m2/settings.xml
activer facilement pour toutes vos versions de Maven.Comme vous pouvez le voir, le suivi des bogues fonctionne , le problème a été résolu et un package fixe est disponible et une nouvelle version du plugin surefire arrivera bientôt!
la source
Définissez useSystemClassloader sur false:
Si vous n'héritez pas d'un parent dont la version a été définie pour vous (comme le démarreur Spring Boot), vous devrez également le définir.
la source
J'ai trouvé cette solution de contournement et corrigé mes tests: configurez le
maven-surefire-plugin
pour ne pas utiliser le chargeur de classe système.la source
forkCount
de 0 ou la définitionargLine
globale) ont des problèmes et ne peuvent pas être appliquées universellement.J'ai une autre solution de contournement. Définissez la variable d'environnement _JAVA_OPTIONS. J'ai utilisé cela pour nos agents de build TeamCity et maintenant nos builds fonctionnent bien.
la source
J'ai publié une variante plus ciblée de l'une des solutions ci-dessus dans JIRA . Ajouter à
~/.m2/settings.xml
:la source
[WARNING] Expected root element 'settings' but found 'profile' (position: START_TAG seen <profile>... @1:9) @ /home/nikolai/.m2/settings.xml, line 1, column 9
<settings><profiles>...</profiles></settings>
.J'ai eu ce problème dans ma build GitLab CI, qui utilisait l'
maven:3.5.4-jdk-8
image Docker.Le changer pour
maven:3.5.4-jdk-8-alpine
résoudre le problème.la source
J'ai suivi ce lien https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html et ajouté le plugin ci-dessous dans pom.xml et cela a fonctionné,
la source
Lors de l'utilisation de GitLab CI / CD avec
3.6.0-jdk-8
image, seule la propriété ci-dessous a aidé (sans modifierpom.xml
).la source
Pour ceux qui recherchent une réponse liée à Docker Maven: 3.5.x-jdk-8 sur GitLab CI, consultez ce problème GitHub .
Il semble qu'une
3.5.4-jdk-8
image ait entraîné une mise à niveau vers une version Java mineure qui affecte en quelque sorte le mécanisme de forking de Surefire.Revenir à l'
3.5.3-jdk-8
image a corrigé cela pour moi sur mon serveur GitLab CI qui construit le code Java 1.8 avec Surefire 2.20.1.la source
La suggestion ci-dessus pour définir la propriété "-Djdk.net.URLClassPath.disableClassPathURLCheck = true" n'a PAS fonctionné pour moi, mais la définition de ce qui suit fonctionne correctement:
la source
Pour Ubuntu: installez la dernière version, ce bug a été corrigé
Installez la dernière version de travail (sans correctifs de sécurité) sans le bogue.
Si vous avez manqué cette version, utilisez la version précédente:
Utilisez ensuite soit l' épinglage ou faites attention à ne pas installer la version cassée.
L'utilisation
-Djdk.net.URLClassPath.disableClassPathURLCheck=true
n'a pas fonctionné pour moi partout où j'avais mis cette configuration. Quelque part dans mes tests d'intégration, il s'est toujours arrêté sans l'ancienne version Java.Comme mentionné par Erich, c'est un bogue dans le paquet Debian étant trop strict 911925 et le plugin Surefire n'agissant pas selon les nouvelles règles SUREFIRE-1588 .
la source
J'ai ajouté une dépendance à junit-jupiter-engine, et cela a fonctionné.
la source
J'ai récemment configuré le travail maven sur Jenkins et suis resté coincé dans le même problème. J'ai pris la suggestion de modifier la variable env JAVA et de confirmer le problème résolu. C'est ainsi que j'ai testé.
Devient un utilisateur "jenkins" et change le dossier en nom de projet d'espace de travail que vous avez configuré pour le travail.
la source
En ajoutant ceci au plugin maven-surefire, j'ai résolu le problème:
la source
Fondamentalement, il y a une incompatibilité entre la version JDK et la version du plugin maven-surefire, dans mon cas, JDK 11.0.5 ne fonctionne pas avec surefire 3.0.0-M4, j'ai dû passer à 3.0.0-M3 et cela a fonctionné. définir forkCount à 0 ne résout pas le problème car il rompt le rapport Jacoco.
la source
J'ai désinstallé le JDK fourni dans les référentiels:
J'ai ensuite supprimé la
JAVA_HOME
variable d'environnement. Le mien a été placé dans mon .bashrc.Ensuite, je l'ai réinstallé via SDKMAN:
Depuis leur site :
Pour voir d'autres versions du JDK à installer, utilisez:
la source
Je faisais face à la même question avec gitlab ce ci, en changeant l' image de maven
maven:3-jdk-8
àmaven:3.6.0-jdk-8-alpine
semble résoudre le problème. Btw j'ai également testé avecmaven:3.6.0-jdk-8
mais cela n'a pas fonctionné non plus.la source
C'est toujours un problème
surefire - v2.22.2
avecmaven:3.6-jdk-8-alpine
. Pour résoudre le problème, ajoutez le code ci-dessous àpom.xml
(en tant que plugin maven)la source
Si comme moi, vous avez des problèmes dans votre pipeline (pour moi, c'est dans GitLab, mais peu importe) et si vous utilisez une image Docker Maven JDK 8.
Vous pouvez remplacer
par la dernière version de travail
la source