Поскольку событие, которого я не знаю, вызов mvn test
больше не работает в моем Ubuntu 18.04. (работает с апреля). mvn install -DskipTests=true
или любая другая фаза жизненного цикла, которую я пробовал, работает хорошо.
Если я запускаю, например, mvn test
в последней версии Apache Commons IO, клонированной в /home/reichelt/commons-io/
, если отображается
[ERROR] ExecutionException The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
[ERROR] Command was /bin/sh -c cd /home/reichelt/commons-io && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Xmx25M -jar /home/reichelt/commons-io/target/surefire/surefirebooter6661636703131088733.jar /home/reichelt/commons-io/target/surefire 2018-10-31T18-30-50_926-jvmRun1 surefire4405197448341812663tmp surefire_1048154306090710821475tmp
[ERROR] Error occurred in starting fork, check output in log
[ERROR] Process Exit Code: 1
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.awaitResultsDone(ForkStarter.java:494)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.runSuitesForkPerTestSet(ForkStarter.java:441)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:293)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1149)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:978)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:854)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[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:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:955)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:194)
[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)
[ERROR] Caused by: 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 /home/reichelt/commons-io && /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Xmx25M -jar /home/reichelt/commons-io/target/surefire/surefirebooter6661636703131088733.jar /home/reichelt/commons-io/target/surefire 2018-10-31T18-30-50_926-jvmRun1 surefire4405197448341812663tmp surefire_1048154306090710821475tmp
[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:671)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:533)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.access$600(ForkStarter.java:115)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter$2.call(ForkStarter.java:429)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter$2.call(ForkStarter.java:406)
[ERROR] at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[ERROR] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[ERROR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[ERROR] at java.lang.Thread.run(Thread.java:748)
В целевых / верных отчетах содержится много повторений
# Created on 2018-10-31T18:31:48.243
Error: Could not find or load main class org.apache.maven.surefire.booter.ForkedBooter
Любой другой проект, который я пробовал, показывает похожее поведение.
Я попытался загрузить maven 3.5.4, разархивировать его, добавить к пути с помощью export PATH=/home/reichelt/Downloads/apache-maven-3.5.4-bin/apache-maven-3.5.4/bin:$PATH
и запустить более новую версию, но это ничего не изменило (хотя mvn -version
работает правильно и показывает более новую версию). То же самое происходит с Maven 3.5.0.
Ошибка Maven: не удалось найти или загрузить основной класс org.codehaus.plexus.classworlds.launcher.Launcher предполагает, что настройка export M3_HOME=/usr/share/maven
и export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
должна помочь, но, к сожалению, это не помогло.
Я попытался удалить ~/.m2
, но, к сожалению, это тоже не помогло.
Запуск этого в док-контейнере с docker run -it ubuntu
и запуск
apt update
apt install -y openjdk-8-jdk maven git
mvn -version
git clone https://github.com/apache/commons-io.git
cd commons-io/
mvn test
приводит к тому же поведению, так что, похоже, это проблема не только моей установки.
Бег docker run -it fedora bash
и
yum install java-1.8.0-openjdk.x86_64*
yum install wget
wget http://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -xvf apache-maven-3.5.4-bin.tar.gz
yum install git
export PATH=/apache-maven-3.5.4/bin:$PATH
mvn -version
git clone https://github.com/apache/commons-io.git
cd commons-io/
mvn test
запускает тесты, как и ожидалось, неожиданно.
Кто-нибудь знает, как решить эту проблему / обойти ее?
EDIT
Как следует из сообщения, это похоже на проблему с ForkedBooter
, которую невозможно найти. https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html описывает, что верный огонь может использоваться изолированным загрузчиком классов в загрузочном фляге или банкой только для манифеста. Похоже, по умолчанию я использую jar-файл только для манифеста, который содержит что-то вроде:
Manifest-Version: 1.0
Class-Path: file:/home/reichelt/.m2/repository/org/apache/maven/surefi
re/surefire-booter/2.21.0/surefire-booter-2.21.0.jar file:/home/reich
elt/.m2/repository/org/apache/maven/surefire/surefire-api/2.21.0/sure
fire-api-2.21.0.jar file:/home/reichelt/.m2/repository/org/apache/mav
en/surefire/surefire-logger-api/2.21.0/surefire-logger-api-2.21.0.jar
file:/home/reichelt/commons-io/target/test-classes/ file:/home/reich
elt/commons-io/target/classes/ file:/home/reichelt/.m2/repository/jun
it/junit/4.12/junit-4.12.jar file:/home/reichelt/.m2/repository/org/h
amcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar file:/home/reichelt/.
m2/repository/org/apache/maven/surefire/surefire-junit4/2.21.0/surefi
re-junit4-2.21.0.jar
Main-Class: org.apache.maven.surefire.booter.ForkedBooter
Мне кажется, это нормально: /home/reichelt/.m2/repository/org/apache/maven/surefire/surefire-booter/2.21.0/surefire-booter-2.21.0.jar
в порядке и содержит файл класса для org.apache.maven.surefire.booter.ForkedBooter
.
Путем добавления
<useSystemClassLoader>true</useSystemClassLoader>
<useManifestOnlyJar>false</useManifestOnlyJar>
до pom, сборки запускаются снова. Похоже, это решение, которое не использует ForkedBooter
. Хотя это обходной путь, я все же хотел бы понять: могу ли я продолжить отладку этой проблемы, чтобы найти причину, пока она не работает с текущей Ubuntu? Поскольку он не работает с другими версиями maven (даже в свежем док-контейнере Ubuntu), но работает с контейнером Fedora, я предполагаю, что причина как-то связана с конфигурацией Ubuntu по умолчанию.