我们正在从Oracle JDK/JRE切换到OpenJDK。现在我只找到了JDK,但我还想从OpenJDK获取JRE。这是为了在没有完整的JDK的情况下在客户端安装我们的应用程序。
有没有办法从Windows X64的OpenJDK创建JRE包?
我们正在从Oracle JDK/JRE切换到OpenJDK。现在我只找到了JDK,但我还想从OpenJDK获取JRE。这是为了在没有完整的JDK的情况下在客户端安装我们的应用程序。
有没有办法从Windows X64的OpenJDK创建JRE包?
java --list-modules
获取所有可用的OpenJDK模块列表jlink --no-header-files --no-man-pages --compress=2 --add-modules <步骤1中的模块列表> --output java-runtime
创建一个紧凑的jre。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 9开始,JDK不再分发单独的JRE。您需要使用jlink
并指定您的代码依赖的模块来生成自定义的jre。
因为这可能会让人感到麻烦,我创建了一个基于Web的工具,以便更轻松地从OpenJDK实现(例如Oracle HotSpot、Eclipse OpenJ9或Amazon Corretto)中使用jlink
创建自定义JRE。该工具将根据您的需求给出正确的jlink
命令。
我还包括了一种制作标准Java SE JRE的方法,适用于那些只想要基本轻量级(约40-60 MB)JRE的人。如果您知道如何使用终端,制作适用于JDK 9及以上版本的通用JRE只需要不到2分钟。
请在此处尝试 - EasyJRE:https://justinmahar.github.io/easyjre/
我将发布比SteinarH发布的内容稍微简单一些的东西。我不想自己编译那个列表,所以......这个工具可以为您完成这项工作。此外,为了更加简洁,我不会将其标记为java-runtime
,而是jre-11
(或者您正在使用的任何版本)。
以下是PowerShell代码:
jlink --no-header-files --no-man-pages --compress=2 --add-modules $($(java --list-modules) -join "," -replace "@[0-9]*") --output jre-11
choco install -y adoptopenjdk11jre
,它还会为您处理环境变量。 - Maxs728亚马逊Corretto OpenJDKhttps://aws.amazon.com/corretto/提供了JDK和JRE的版本。
然后它继续解释了需要使用Cygwin进行构建,本地编译器和库的要求以及“引导”JDK的问题,后者是编译源代码树中的Java类所必需的。Windows XP不是受支持的平台,但所有更新的Windows应该能够构建OpenJDK。
从Java 9开始,Oracle根本不提供JRE发行版。不是针对Oracle Java。也不是针对OpenJDK Java。就Oracle而言,JRE在Java 8之后结束。
您为自己构建的任何内容都是成本和风险。
import os
jmod_str = os.popen('java --list-modules').read()
init = jmod_str.index('@')
end = jmod_str.index('\n')
version = jmod_str[init:end]
jmod_list = jmod_str.replace(version, '').replace('\n', ',')
jmod_list = jmod_list[:-1] if jmod_list[-1] == ',' else jmod_list
cmd = 'jlink --no-header-files --no-man-pages --compress=2 --module-path ..\jmods --add-modules '+ jmod_list + ' --output ..\jre'
java --list-modules
的输出java
开头的行@versionnumber
jlink --output jre --compress=2 --no-header-files --no-man-pages --module-path ../jmods --add-modules
PowerShell:
jlink --output jre --compress=2 --no-header-files --no-man-pages --module-path ../jmods --add-modules "$((java --list-modules | Select-String -Pattern '^(java[^@]+?)@' | % {"$($_.Matches.Groups[1].value)"}) -join ',')"