"Essential" (Jigsawed) Java 9 没有模块化代码的 JRE

"Essential" (Jigsawed) Java 9 JRE without modularized code

我们有一个 Java 应用程序,它不使用 AWT/Swing/JavaFX 并且可以与私有捆绑的 JRE 8 一起正常工作。JRE 9 比 JRE 8 大得多,但我们想让用户尝试我们的使用 JRE 9 的应用程序。我们还不想模块化我们的代码或 jars(以保持与 Java 8 的兼容性)。

如何创建可以与该 Java 应用程序捆绑在一起的 "essential"(= 精简到最少的必需部分)私有 JRE 9?

可以创建 JRE 的自定义运行时映像,而无需将应用程序本身转换为 Java 9 个模块。首先,我们需要找出需要哪些模块(JDK/JRE):

"C:\Program Files\Java\jdk-9.0.1\bin\jdeps.exe"
                 -s
                 "C:\path\to\my\jars\*.jar"

然后我们可以创建一个轻量级的jre目录结构(将java.logging,java.xml替换成你应用需要的模块):

"C:\Program Files\Java\jdk-9.0.1\bin\jlink.exe"
                 --module-path "C:\Program Files\Java\jdk-9.0.1\jmods"
                 --add-modules java.logging,java.xml
                 --output "e:\myproject\jre"