digital-garden/dev/java/Java Platform Module System.md
2024-10-25 20:04:39 +03:00

4.3 KiB
Raw Blame History

aliases tags date zero-link parents linked
модули
модуль
модулей
JPMS
модульную систему
maturity/🌱
2024-10-15

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

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

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

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

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

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

Дескриптор

Каждый модуль имеет дескриптор - файл module-info.java, который содержит описание того, какие зависимости необходимы модулю и какие пакеты он экспортирует для других. Этот файл должен быть размещен в папке src/main/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, остаются приватными и недоступными для других модулей.

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


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

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

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

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