Модульная система Java (JPMS), представленная в Java 9, позволяет разработчикам разбивать приложения на логически обособленные блоки — модули.

Не Maven/Gradle модули

Модули в Maven и Gradle — это структурные единицы системы сборки, которые помогают управлять зависимостями и сборкой проекта, но они не являются модулями в контексте модульной системы Java (JPMS).

Модуль - это набор пакетов, содержащих типы (классы и интерфейсы) ресурсы и другие виды статической информации.

Какие проблемы решает?

  • Делает зависимости явными
  • Улучшает инкапсуляцию, предотвращая создание нежелательных зависимостей между модулями. Все привыкли к модификаторам доступов у классов, но у пакетов модификаторов доступа не было.

Одним из ключевых преимуществ JPMS является чёткий контроль зависимостей. В старой системе через classpath все классы и пакеты были доступны друг другу без явного указания разрешений, что часто приводило к ошибкам и некорректному использованию библиотек. С JPMS разработчики могут точно указывать, какие зависимости нужны модулю и какие его части будут видимы другим модулям.

Дескриптор

Каждый модуль имеет дескриптор - файл module-info.java, который содержит описание того, какие зависимости необходимы модулю и какие пакеты он экспортирует для других.

Дескриптор описывает:

  • Импортируемые, экспортируемые, транзитивно-экспортируемые пакеты.

Пример простого дескриптора:

module com.example.myapp {
    requires java.sql;
    exports com.example.myapp.service;
}

В этом примере модуль com.example.myapp использует (requires) модуль java.sql и экспортирует (exports) пакет com.example.myapp.service, который может быть использован другими модулями. Все остальные пакеты, не указанные в директиве exports, остаются приватными и недоступными для других модулей.

Обратная совместимость

Модульная система разработана с учётом совместимости с предыдущими версиями JDK. Проекты, которые не перешли на JPMS, могут по-прежнему использовать старую систему через classpath.


Мета информация

Область:: 00 Java разработка
Родитель:: Устройство Java
Источник::
Создана:: 2024-10-15
Автор::

Дополнительные материалы

Дочерние заметки