UseSplitVerifier Java 7 到 Java 9

UseSplitVerifier Java 7 to Java 9

我们正在将现有应用程序从 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 link 它说最低限度是使用 2.20.1 所以我认为这样可以吗?当我搜索我的项目时,我没有看到任何 UseSplitVerifier 参数被传递,所以我不确定除了 surefire 插件之外是什么在使用该命令。

您的失败日志开始调查的可能原因是标志,

-XX:-UseSplitVerifier

这似乎是 deprecated with Java8 itself, is no more supported in Java9 [source -

你最好在迁移时去掉这个标志,因为你在编译或执行 类 到 Java SE 的 53 版本时不需要这个(Java 9).


Edit: 2.20.1 版本的 surefire 在通过 junit 执行测试时报告内存泄漏。您可能想继续使用 2.19.1,它应该仍然可以与 Java9 个模块一起正常工作。