如果您下载 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 是使用特定的模块列表构建的。如果您掌握了该模块列表或仅使用上面的列表来构建运行时映像,您应该获得与从 AdoptOpenJDK 下载的 JRE 完全相同的行为。
一些警告:(a)这只是我的假设,所以不要把你的项目押在上面,(b)你可以应用很多标志jlink
来摆弄生成的图像,例如压缩或剥离调试符号,这将影响其大小、性能(轻微)和调试能力。