我们正在将现有的应用程序从Java 7转换为Java 9,我正在尝试遵循此页面的最低要求:https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw
当我尝试在一些组件上运行mvn clean install时,我不断得到:
Caused by: org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
Command was cmd.exe /X /C ""C:\Program Files\Java\jdk-9.0.1\bin\java" --add-modules java.se.ee -XX:-UseSplitVerifier -jar
当我尝试使用Google UseSplitVerifier时,我会不断看到有关StackMapTable的信息,或者UseSplitVerifier是否可以安全使用。但是我真的不知道什么是UseSplitVerifier,以及从J7-> J9构建的正确方法是什么。
编辑
我的pom.xml有这个插件:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
查看https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw链接,它说最低限度是使用2.20.1,所以我认为可以吗?当我搜索我的项目时,我看不到传递任何
UseSplitVerifier
参数,因此我不确定除surefire插件以外的命令正在使用什么。 最佳答案
您的失败日志开始调查的可能原因是该标志,
-XX:-UseSplitVerifier
Java9不再支持deprecated with Java8本身[源-Complete list of JVM options
理想情况下,在迁移时应该摆脱该标志,因为在将类编译或执行到Java SE(Java9)的53版时不需要此标志。
编辑:通过junit执行测试时,在2.20.1版本的surefire中报告了内存泄漏。您可能希望仍使用2.19.1,该版本应仍可与Java9模块正常工作。