Какие системные модули по умолчанию находятся в пути модулей?

Когда я запускаю приложение через java -cp (без --add-modules или же --limit-modules), некоторые системные модули Java являются наблюдаемыми, а другие - нет.

Например, все java.se модули наблюдаемы. Все java.se.ee модули не наблюдаемы. я знаю это javafx.* модули наблюдаемы. jdk.unsupported а также jdk.shell тоже наблюдаемые.

Итак, верно ли мое предположение: если нет --add-modules а также --limit-modules набор наблюдаемых системных модулей состоит из всех системных модулей, кроме java.se.ee?

Есть ли надежный способ узнать точный список наблюдаемых системных модулей по умолчанию? Я знаю, что есть --list-modules вариант, но в нем перечислены все модули, включая java.se.ee,

1 ответ

Итак, верно ли мое предположение: если не заданы --add-modules и --limit-modules, набор наблюдаемых системных модулей состоит из всех системных модулей, кроме java.se.ee?

Короче да, это правильно.

Набор модулей по умолчанию, включенный в Java 9, называется корневыми модулями. В соответствии с JEP 261 набор корневых модулей по умолчанию определяется как:

  • Модуль java.se является корневым, если он существует. Если он не существует, то каждый модуль java. * В пути модуля обновления или среди системных модулей, экспортирующих хотя бы один пакет без квалификации, является корневым.

  • Каждый не-java.* Модуль на пути модуля обновления или среди системных модулей, который экспортирует хотя бы один пакет без квалификации, также является корневым.

Вот хорошая графика того, что входит в java.se модуль: (Источник: Java 9 Javadoc)

Словно java.se агрегатный модуль, java.se.ee Сам модуль не предоставляет никаких классов, это агрегатный модуль, который включает в себя следующие модули:

java.se
java.activation
java.annotations.common
java.corba
java.transaction
java.xml.bind
java.xml.ws

Есть ли надежный способ узнать точный список наблюдаемых системных модулей по умолчанию? Я знаю, что есть опция --list-modules, но она перечисляет все модули, включая java.se.ee.

Ваша терминология здесь немного неправильная. В Java 9 модуль можно наблюдать, если выполняются оба следующих условия:

  • модуль является системным модулем (т.е. происходит из JDK) ИЛИ он добавляется в путь к модулю
  • модуль не исключен через --limit-modules

Это означает java.se.ee по умолчанию можно наблюдать

Я думаю, что вместо этого вам интересно, какие модули являются набором корневых модулей по умолчанию? В этом случае см. Приведенное выше определение корневых модулей.

Другие вопросы по тегам