JDK9开始就没有JRE,JDK 9和更高版本提供了 jlink 命令,以将一组模块及其依赖项组装和优化到自定义 JRE Runtime 中。本文主要介绍解决 JDK11 安装后不自带 jre 的问题,使用jlink生成创建 JRE Runtime。

创建JRE命令

在控制台输入:

  1. jlink --no-header-files --no-man-pages --compress=2 --add-modules java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml,java.xml.crypto,jdk.accessibility,jdk.aot,jdk.attach,jdk.charsets,jdk.compiler,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,jdk.dynalink,jdk.editpad,jdk.hotspot.agent,jdk.httpserver,jdk.internal.ed,jdk.internal.jvmstat,jdk.internal.le,jdk.internal.opt,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.jartool,jdk.javadoc,jdk.jcmd,jdk.jconsole,jdk.jdeps,jdk.jdi,jdk.jdwp.agent,jdk.jfr,jdk.jlink,jdk.jshell,jdk.jsobject,jdk.jstatd,jdk.localedata,jdk.management,jdk.management.agent,jdk.management.jfr,jdk.naming.dns,jdk.naming.rmi,jdk.net,jdk.pack,jdk.rmic,jdk.scripting.nashorn,jdk.scripting.nashorn.shell,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported,jdk.unsupported.desktop,jdk.xml.dom,jdk.zipfs --output java-runtime

执行完成后,在当前文件夹中生成 java-runtime文件夹,这就是我们想要的 JRE。

java —list-modules:获取所有可用openjdk模块的列表。
jlink —no-header-files —no-man-pages —compress=2 —add-modules —output java-runtime:创建一个精简的JRE
—module-path:等效于类路径,告诉JVM在哪里搜索模块。可以不写,默认查找本机环境变量JDK当前的jmods。
—add-modules:这指定要解决的其他根模块。由于所有应用程序代码都在类路径上,因此我们没有初始模块,因此此选项是必需的。我们可以用两种方式指定它,要么使用上述的显式模块列表,要么使用 parameter 指示要包含模块路径上的所有内容 ALL-MODULE-PATH。