4.3 KiB
aliases | tags | date | zero-link | parents | linked | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
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 Автор::