当前位置: 首页 > 知识库问答 >
问题:

Maven测试在Ubuntu中抛出异常

黄涵畅
2023-03-14

由于一个我不知道的事件,调用mvn test在我的Ubuntu18.04中不再起作用。(自4月开始运行)。mvn install-dskiptests=true或I阶段尝试的任何其他生命周期都运行良好。

例如,如果我在克隆到/home/reichelt/commons-io/中的Apache Commons IO的最新版本中运行mvn test,If显示

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

target/surefire-reports包含以下内容的许多重复

# 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可以正常工作并显示较新的版本)。Maven3.5.0也有同样的情况。

Maven错误:找不到或加载主类org.codehaus.plexus.ClassWorlds.Launcher.Launcher建议设置export m3_home=/usr/share/Mavenexport java_home=/usr/lib/jvm/java-8-openjdk-amd64/应该有所帮助,但不幸的是,没有。

我尝试删除~/.m2,但不幸的是,这也没有帮助。

使用docker run-it ubuntu在docker容器中运行,并运行

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

产生相同的行为,所以这似乎不仅仅是我安装的问题。

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

有人知道如何解决这个问题吗?

按照消息提示进行编辑,这似乎是找不到forkedbooter的问题。https://maven.apache.org/surefire/maven-surefire-plugin/examples/class-loading.html描述了surefire可以由引导器jar中的独立类加载器使用,也可以由仅清单的jar使用。默认情况下,我使用的是一个仅有清单的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 docker容器中),但可以在一个Fedora容器中工作,我认为原因与Ubuntu默认配置有关。

共有1个答案

秦涵映
2023-03-14

有趣的故事:事实上,这是一个OpenJDK更新问题。

我通过sudozcat/var/log/apt/history.log.1.gzless阅读了我的上一个历史记录(根据logrotating的不同,它是.1,可能是其他任何东西)。这表明今天上午运行了一个更新:

Start-Date: 2018-10-31  10:38:04
Commandline: /usr/bin/unattended-upgrade
Upgrade: openjdk-8-jdk:amd64 (8u181-b13-0ubuntu0.18.04.1, 8u181-b13-1ubuntu0.18.04.1), openjdk-8-jre:amd64 (8u181-b13-0ubuntu0.18.04.1, 8u181-b13-1ubuntu0.18.04.1), openjdk-8-jdk-headless:amd64 (8u181-b13-0ubuntu0.18.04.1, 8u181-b13-1ubuntu0.18.04.1), openjdk-8-jre-headless:amd64 (8u181-b13-0ubuntu0.18.04.1, 8u181-b13-1ubuntu0.18.04.1)
End-Date: 2018-10-31  10:38:09

因此,由于某种原因,OpenJDK8U181似乎与html" target="_blank">maven 3.5.2和Surefire不兼容。由于我已经安装了软件包升级,我再次使用sudo apt install openjdk-8-jdk=8u162-b12-1 openjdk-8-jre=8u162-b12-1 openjdk-8-jdk-headless=8u162-b12-1 openjdk-8-jdk-headless=8u162-b12-1降级。现在测试又起作用了。

在https://www.oracle.com/technetwork/Java/javase/8u-relnotes-2225394.html中,Java8u171、8u172和8u181似乎不包含使使用仅支持Maninfest的surefire jar变得不可能的更新,但我只是在上面看了一下,并没有深入研究bug报告。

OpenJDK上已经报告了编辑错误:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911925

编辑2此错误在Java1.8.0_191中被修复,mvn测试再次正常运行。

 类似资料:
  • 我用Spock测试Java代码。我测试这段代码: 我写了一个测试: 它失败是因为抛出了另一个CustomException。但是在块中,我捕获这个异常并抛出一个,因此我希望我的方法将抛出,而不是。如何测试它?

  • 我用6.5.0版创建了一个drools项目。决赛进行得很顺利。但当我创建一个maven项目时,它的抛出错误 这是我在POM文件中的依赖项 这是密码 getKieClasspathContainer正在抛出错误。 谷歌搜索了这个错误,发现添加Xstream依赖项可以解决这个问题,但解决不了。使用Java 7和tomcat 7。我需要向POM添加任何其他依赖项吗?有人知道吗?

  • 问题内容: 我在这里关注了几乎所有的JUnit + Maven + AspectJ问题,即使我很确定自己设置的都正确,我也无法对其进行测试。 我只有一个方面的Maven模块: 非常简单。我想做的就是在我的测试项目中每次执行任何测试方法之前和之后执行一些用注释的操作。 现在,我使用我的是这样的: 1)我没有目标,因为我没有课程(是的,没关系,我知道我在做什么) 2)我有 在我的部分 关于aspect

  • 我正在处理一些代码,需要测试函数抛出的异常类型(是TypeError、ReferenceError等吗?)。 我当前的测试框架是AVA,我可以将其作为第二个参数方法进行测试,如下所示: 我开始用笑话重写我的测试,但找不到如何轻松做到这一点。这有可能吗?

  • 我有一个方法: 这是用户授权测试的样子: 有没有办法检查用户输入错误密码的情况?因为在我发送错误密码的情况下,它不起作用,因为 使在你检查密码之前返回结果。

  • 问题内容: 嗨,有一个针对车辆构造函数的测试。该测试会在没有驾驶执照的情况下使用驾驶员对车辆进行初始化,并且应该抛出异常。代码构造函数: 代码测试: 当我运行此重点测试方法时,这就是结果。 -------------标准输出--------------- 吉恩正确的rijbewijs 因此,根据输出,捕获并显示了异常,但测试失败。有人知道为什么吗?提前致谢。 编辑:我通过不包括try-catch块