gpt4 book ai didi

java - AdoptOpenJDK 的 JRE 11+ 是否和在 JDK 上使用 jlink 一样,添加所有依赖项

转载 作者:行者123 更新时间:2023-12-01 12:00:57 27 4
gpt4 key购买 nike

AdoptOpenJDK 的 JRE 11+ 是否与仅使用 相同? jlink 并添加所有依赖项?

Oracle Java 11 及更高版本不附带仅 JRE JDK,因为您可以使用 构建自己的 JRE,其中仅包含您需要的系统模块。 jlink ,这就是我在 Windows 和 Linux 上所做的。

但是,对于我来说,如何为某些平台(Docker 和 MacOS)合并 jlinked JRE 对我来说并不是那么明显,而且由于 AdoptOpenJDK 不仅为 JDK 提供了二进制文件,还为 JRE 提供了二进制文件,我想我可能只为这些平台使用 JRE。 但是如果我链接 JDK 并包含所有系统模块依赖项,JRE 是否包含我将获得的所有内容?

最佳答案

如果您下载 Adopt 的 JRE 并运行 java --list-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.charsets
jdk.crypto.cryptoki
jdk.crypto.ec
jdk.dynalink
jdk.httpserver
jdk.internal.ed
jdk.internal.le
jdk.internal.vm.ci
jdk.internal.vm.compiler
jdk.internal.vm.compiler.management
jdk.jdwp.agent
jdk.jfr
jdk.jsobject
jdk.localedata
jdk.management
jdk.management.agent
jdk.management.jfr
jdk.naming.dns
jdk.naming.rmi
jdk.net
jdk.pack
jdk.scripting.nashorn
jdk.scripting.nashorn.shell
jdk.sctp
jdk.security.auth
jdk.security.jgss
jdk.unsupported
jdk.xml.dom
jdk.zipfs

如果您下载 JDK 并使用 jlink --add-modules java.se要构建镜像,您将获得以下信息:
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.sql
java.sql.rowset
java.transaction.xa
java.xml
java.xml.crypto

如您所见,它不包含 jdk.* 模块,因为严格来说,运行时不需要这些模块。尽管如此,他们的缺席还是会被注意到,例如如果没有 jdk.localedata,只有英语语言环境(或者甚至可能只是美国)可以工作。

如果你问 jlink要绑定(bind)服务,您会得到不同的画面,但仍与 JRE 不同:
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.charsets
jdk.compiler
jdk.crypto.cryptoki
jdk.crypto.ec
jdk.dynalink
jdk.internal.opt
jdk.jartool
jdk.javadoc
jdk.jdeps
jdk.jfr
jdk.jlink
jdk.localedata
jdk.management
jdk.management.jfr
jdk.naming.dns
jdk.naming.rmi
jdk.scripting.nashorn
jdk.security.auth
jdk.security.jgss
jdk.unsupported.desktop
jdk.zipfs

的存在,例如jdk.compiler 和 jdk.javadoc 意味着 bin目录将包含 javacjavadoc工具,可能不是您对 JRE 的期望。

这告诉我 Adopt 的 JRE 是使用特定的模块列表构建的。如果您掌握了该模块列表或仅使用上面的列表来构建运行时镜像,您应该获得与从 AdoptOpenJDK 下载的 JRE 完全相同的行为。

一些警告:(a) 这只是我的假设,所以不要把你的项目押在上面,(b) 有很多标志可以应用到 jlink摆弄生成的图像,例如压缩或剥离调试符号,这将影响其大小、性能(轻微)和调试能力。

关于java - AdoptOpenJDK 的 JRE 11+ 是否和在 JDK 上使用 jlink 一样,添加所有依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com