Почему Java 9 просто не превращает все банки на пути к классу в автоматические модули?
Чтобы понять категории, у нас есть:
- явные модули платформы
- явные модули приложений
-
открытые модули - автоматические модули
- безымянный модуль
Все классы и банки в пути к классу будут частью неназванного модуля. Но почему это то, что нам нужно? Где преимущество над автоматическими модулями? Я мог бы "потребовать" эти проклятые банки наследия, чтобы сделать их автоматическим модулем. Разве я не включил все вместе с ним?
1 ответ:
Есть, по крайней мере, две причины:
- как и обычные модули, автоматические модули подозрительны к определенным проверкам со стороны модульной системы, напримерне расщепляющие пакеты . Поскольку JARs на пути к классу может (и иногда делает) разбивать пакеты, наложение этой проверки на них будет обратно несовместимым и нарушит ряд приложений.
- неназванный модуль может читать все модули платформы, в то время как автоматические модули могут читать только те, которые вошли в модуль диаграмма. Это означает, что банку требуется java.desktop модуль (например) будет работать из пути к классу, но не из графа модуля, если только java.desktop также вносит его в график (через зависимость или
--add-modules
).У меня сейчас нет времени проверять второй, но вот что говорит состояние системы модулей :
Таким образом, после разрешения графа модуля создается автоматический модуль для чтения каждого другого именованного модуля, будь то автоматический или явный
Разрешение на строительство заявленного зависимостей и автоматических модулей заявляет никто.