Niedawno przyjeżdżam do nowego projektu, próbuję skompilować nasz kod źródłowy. Wczoraj wszystko działało dobrze, ale dzisiaj jest inna historia.
Za każdym razem, gdy uruchamiam mvn clean install
moduł, po przejściu do testów, pojawia się błąd:
[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
a później:
[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?
Używam 64-bitowego systemu Debian 9 (Stretch) z OpenJDK 1.8.0_181, Maven 3.5.4, pracując za moim firmowym serwerem proxy, który skonfigurowałem w swoim ~/.m2/settings.xml
.
Dziwną rzeczą jest to, że najnowsza wersja Surefire to 2.22.1, jeśli dobrze pamiętam. Próbowałem określić wersję wtyczki, ale nie jest ona aktualizowana, w przeciwnym razie nie ma specyfikacji wersji wtyczki w żadnym POM (rodzicu, dziadku lub tym).
Udało mi się zmusić Maven do zmiany wersji Surefire na najnowszą, ale teraz jest jeszcze gorzej:
[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)
źródło
dependencyManagement
sekcji maven, aby określić różne wersje wtyczekOdpowiedzi:
Aby to naprawić (w 2018 r.), Zaktualizuj openjdk do najnowszej wersji, co najmniej 8u191-b12. W przypadku ponownego pojawienia się tego problemu w 2020 r. Prawdopodobne jest, że domyślne zachowanie openjdk zostało zmienione, a następnie konieczna będzie aktualizacja wtyczki maven surefire.
To był już naprawiony błąd w pakiecie openjdk-8 (zachowanie odbiega znacznie od upstream bez potrzeby; brak poprawki upstream, aby powrócić do wyłączenia kontroli bezpieczeństwa), do której właśnie zaktualizowałeś. Ale jest też błąd w murowany wtyczki, murowany, 1588 , rzekomo ustalonego SureFire 3.0.0-M1 : to widocznie jest za pomocą ścieżek bezwzględnych w miejscu, gdzie Java będzie w przyszłości umożliwić tylko nazwy ścieżki względnej (i Debian aktywowany przyszłe zachowanie już).
Wersja pakietu 8u181-b13-2 stanowi:
Zauważ, że 191-b12! = 181-b13. Poprawki bezpieczeństwa 191-b12 zostały wydane kilka dni temu i najwyraźniej opiekunowie chcieli szybko je dostarczyć. Całkowite uaktualnienie do wersji 191-b12 prawdopodobnie będzie wymagało dodatkowych testów (no cóż, więc najwyraźniej powinien mieć ten upload).
Było kilka problemów:
apt
używasz)sudo aptitude forbid-version openjdk-8-jre-headless
. W przypadku zwykłego „apt” nie widziałem podobnego mechanizmu zabraniającego, więc prawdopodobnie będziesz musiał użyć apt pin, aby zapobiec ponownej instalacji tego uaktualnienia (lub po prostu kontynuuj obniżanie, mam nadzieję, że zostanie to wkrótce rozwiązane).-Djdk.net.URLClassPath.disableClassPathURLCheck=true
za pomocą zwykłych metod (np.JAVA_FLAGS
) Powinno również pomóc. Ale sam tego nie zweryfikowałem. Najwyraźniej możesz nawet dodać obejście, aby~/.m2/settings.xml
włączyć je łatwo dla wszystkich swoich kompilacji Maven.Jak widać, śledzenie błędów działa , problem został zawężony, dostępny jest poprawiony pakiet, a wkrótce pojawi się nowa wersja wtyczki surefire!
źródło
Ustaw useSystemClassloader na false:
Jeśli nie dziedziczysz po rodzicu, który ma dla Ciebie wersję (np. Spring Boot Starter), musisz to również zdefiniować.
źródło
Znalazłem to obejście i naprawiłem moje testy: skonfiguruj, aby
maven-surefire-plugin
nie korzystał z systemowego modułu ładującego.źródło
forkCount
na 0 lub ustawienieargLine
globalne) mają problemy i nie mogą być stosowane uniwersalnie.Mam inne obejście. Ustaw zmienną środowiskową _JAVA_OPTIONS. Użyłem tego dla naszych agentów kompilacji TeamCity, a teraz nasze kompilacje działają poprawnie.
źródło
Opublikowałem bardziej ukierunkowany wariant jednego z powyższych obejść w JIRA . Dodaj do
~/.m2/settings.xml
:źródło
[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>
.Miałem ten problem w mojej kompilacji GitLab CI, która używała
maven:3.5.4-jdk-8
obrazu Docker.Zmiana w celu
maven:3.5.4-jdk-8-alpine
rozwiązania problemu.źródło
Śledziłem ten link https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html i dodałem poniższą wtyczkę do pom.xml i działała,
źródło
W przypadku korzystania z GitLab CI / CD z
3.6.0-jdk-8
obrazem pomogła tylko poniższa właściwość (bez modyfikacjipom.xml
).źródło
Dla tych, którzy szukają odpowiedzi związanej z Docker Maven: 3.5.x-jdk-8 w GitLab CI, zobacz ten problem GitHub .
Wygląda na to
3.5.4-jdk-8
obraz spowodował aktualizację do mniejszej wersji Java, co w jakiś sposób wpływa na mechanizm rozwidlania Surefire.Cofanie do
3.5.3-jdk-8
obrazu naprawiło to na moim serwerze GitLab CI budującym kod Java 1.8 z Surefire 2.20.1.źródło
Powyższa sugestia, aby ustawić właściwość „-Djdk.net.URLClassPath.disableClassPathURLCheck = true” NIE działała dla mnie, ale ustawienie następujących opcji działa OK:
źródło
W przypadku Ubuntu: zainstaluj najnowszą wersję, naprawiono ten błąd
Zainstaluj ostatnią działającą wersję (bez poprawek bezpieczeństwa) bez błędu.
Jeśli przegapiłeś tę wersję, użyj wcześniejszej wersji:
Następnie użyj przypięcia lub uważaj, aby nie zainstalować uszkodzonej wersji.
Używanie
-Djdk.net.URLClassPath.disableClassPathURLCheck=true
nie działało dla mnie, gdziekolwiek ustawiłem tę konfigurację. Gdzieś w moich testach integracyjnych zawsze kończyło się bez starej wersji Java.Jak wspomniał Erich , błąd w pakiecie Debian jest zbyt ścisły 911925, a wtyczka Surefire nie działa zgodnie z nowymi zasadami SUREFIRE-1588 .
źródło
Dodałem zależność do silnika junit-jupiter i zadziałało.
źródło
Niedawno skonfigurowałem pracę w Jenkins i utknąłem w tym samym problemie. Przyjąłem sugestię modyfikacji zmiennej env JAVA i potwierdziłem, że problem został rozwiązany. Tak testowałem.
Zostaje użytkownikiem „jenkins” i zmienia folder na nazwę projektu obszaru roboczego skonfigurowanego dla zadania.
źródło
Dodając to do wtyczki maven-surefire, rozwiązałem problem:
źródło
Zasadniczo jest niezgodność między wersją JDK a wersją wtyczki maven-surefire, w moim przypadku JDK 11.0.5 nie działa z surefire 3.0.0-M4, musiałem przełączyć się na 3.0.0-M3 i działało. ustawienie forkCount na 0 nie rozwiązuje problemu, ponieważ psuje raport Jacoco.
źródło
Odinstalowałem pakiet JDK znajdujący się w repozytoriach:
Następnie usunąłem
JAVA_HOME
zmienną środowiskową. Mój został ustawiony w moim .bashrc.Następnie przeinstalowałem go za pomocą SDKMAN:
Z ich strony :
Aby zobaczyć inne wersje JDK do zainstalowania, użyj:
źródło
Miałem do czynienia z tym samym problemem z gitlab ci, zmiana obrazu maven z
maven:3-jdk-8
namaven:3.6.0-jdk-8-alpine
wydaje się naprawiać problem. Btw też testowałem,maven:3.6.0-jdk-8
ale to też nie działało.źródło
Jest jeszcze problem dla
surefire - v2.22.2
omaven:3.6-jdk-8-alpine
. Aby rozwiązać problem, dodaj poniższy kod dopom.xml
(jako wtyczki maven)źródło
Jeśli tak jak ja, masz problemy w przygotowaniu (dla mnie jest to GitLab, ale cokolwiek) i jeśli używasz obrazu Daven MD JDK 8.
Możesz wymienić
według ostatniej działającej wersji
źródło