Какие системные модули по умолчанию находятся в пути модулей?
Когда я запускаю приложение через 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
по умолчанию можно наблюдать
Я думаю, что вместо этого вам интересно, какие модули являются набором корневых модулей по умолчанию? В этом случае см. Приведенное выше определение корневых модулей.