AdoptOpenJDK 的 JRE 11+ 是否与在 JDK 上使用 jlink 相同,添加所有依赖项
Is AdoptOpenJDK's JRE 11+ the same as using jlink on JDK, adding all dependencies
AdoptOpenJDK 的 JRE 11+ 是否与仅使用 jlink 并添加所有依赖项相同?
Oracle Java 11 及更高版本不只附带 JRE JDK 因为您可以使用 jlink[=20= 构建您自己的仅包含您需要的系统模块的 JRE ],这就是我在 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
绑定服务,您会得到不同的画面,但仍然与 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
目录将包含 javac
和 javadoc
工具,可能不是您对 JRE 的期望。
这告诉我 Adopt 的 JRE 是使用特定模块列表构建的。如果您掌握了该模块列表或仅使用上面的列表构建 运行time 映像,您应该获得与从 AdoptOpenJDK.
下载的 JRE 完全相同的行为
一些注意事项:(a) 这只是我的假设,所以不要拿你的项目打赌,(b) 有很多标志可以应用到 jlink
到 fiddle使用生成的图像,例如压缩或剥离调试符号,这将影响其大小、性能(轻微)和调试能力。
AdoptOpenJDK 的 JRE 11+ 是否与仅使用 jlink 并添加所有依赖项相同?
Oracle Java 11 及更高版本不只附带 JRE JDK 因为您可以使用 jlink[=20= 构建您自己的仅包含您需要的系统模块的 JRE ],这就是我在 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
绑定服务,您会得到不同的画面,但仍然与 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
目录将包含 javac
和 javadoc
工具,可能不是您对 JRE 的期望。
这告诉我 Adopt 的 JRE 是使用特定模块列表构建的。如果您掌握了该模块列表或仅使用上面的列表构建 运行time 映像,您应该获得与从 AdoptOpenJDK.
下载的 JRE 完全相同的行为一些注意事项:(a) 这只是我的假设,所以不要拿你的项目打赌,(b) 有很多标志可以应用到 jlink
到 fiddle使用生成的图像,例如压缩或剥离调试符号,这将影响其大小、性能(轻微)和调试能力。