Почему Java 9 просто не превращает все банки на пути к классу в автоматические модули?


Чтобы понять категории, у нас есть:

  • явные модули платформы
  • явные модули приложений
  • открытые модули
  • автоматические модули
  • безымянный модуль

Все классы и банки в пути к классу будут частью неназванного модуля. Но почему это то, что нам нужно? Где преимущество над автоматическими модулями? Я мог бы "потребовать" эти проклятые банки наследия, чтобы сделать их автоматическим модулем. Разве я не включил все вместе с ним?

1 6

1 ответ:

Есть, по крайней мере, две причины:

  • как и обычные модули, автоматические модули подозрительны к определенным проверкам со стороны модульной системы, напримерне расщепляющие пакеты . Поскольку JARs на пути к классу может (и иногда делает) разбивать пакеты, наложение этой проверки на них будет обратно несовместимым и нарушит ряд приложений.
  • неназванный модуль может читать все модули платформы, в то время как автоматические модули могут читать только те, которые вошли в модуль диаграмма. Это означает, что банку требуется java.desktop модуль (например) будет работать из пути к классу, но не из графа модуля, если только java.desktop также вносит его в график (через зависимость или --add-modules).

У меня сейчас нет времени проверять второй, но вот что говорит состояние системы модулей :

Таким образом, после разрешения графа модуля создается автоматический модуль для чтения каждого другого именованного модуля, будь то автоматический или явный

Разрешение на строительство заявленного зависимостей и автоматических модулей заявляет никто.