Если вы загрузите JRE от Adopt и запустите 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 построен с определенным списком модулей. Если вы получите этот список модулей или просто воспользуетесь приведенным выше списком для создания образа среды выполнения, вы должны получить то же поведение, что и JRE, загруженная с AdoptOpenJDK.
Некоторые предостережения: (а) это всего лишь мое предположение, поэтому не ставьте на него ставку в своем проекте, (б) есть множество флагов, которые вы можете применить к jlink
, чтобы поиграть с полученным изображением, например сжатие или удаление символов отладки, что повлияет на его размер, производительность (незначительно) и возможности отладки.
person
Nicolai Parlog
schedule
16.04.2020