--- aliases: - модули - модуль - модулей - JPMS - модульную систему tags: - maturity/🌱 date: 2024-10-15 zero-link: parents: linked: --- Модульная система Java (JPMS), представленная в [[../../../../knowledge/dev/java/Java 9|Java 9]], позволяет разработчикам разбивать приложения на логически обособленные блоки — модули. > [!WARNING] Не Maven/Gradle модули > Модули в Maven и Gradle — это структурные единицы системы сборки, которые помогают управлять зависимостями и сборкой проекта, но они не являются модулями в контексте модульной системы Java (JPMS). Модуль - это набор пакетов, содержащих типы (классы и интерфейсы) ресурсы и другие виды статической информации. **Какие проблемы решает?** - Делает зависимости явными - Улучшает [[../architecture/Инкапсуляция|инкапсуляцию]], предотвращая создание нежелательных зависимостей между модулями. Все привыкли к модификаторам доступов у классов, но у пакетов модификаторов доступа не было. Одним из ключевых преимуществ JPMS является чёткий контроль зависимостей. В старой системе через classpath все классы и пакеты были доступны друг другу без явного указания разрешений, что часто приводило к ошибкам и некорректному использованию библиотек. С JPMS разработчики могут точно указывать, какие зависимости нужны модулю и какие его части будут видимы другим модулям. ## Дескриптор Каждый модуль имеет дескриптор - файл `module-info.java`, который содержит описание того, какие зависимости необходимы модулю и какие пакеты он экспортирует для других. Этот файл должен быть размещен в папке `src/main/java`. Дескриптор описывает: - Импортируемые, экспортируемые, транзитивно-экспортируемые пакеты. Пример простого дескриптора: ```java title=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`, остаются приватными и недоступными для других модулей. > [!NOTE] Обратная совместимость > Модульная система разработана с учётом совместимости с предыдущими версиями JDK. Проекты, которые не перешли на JPMS, могут по-прежнему использовать старую систему через classpath. *** ## Мета информация **Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]] **Родитель**:: [[../../../../knowledge/dev/java/Устройство Java|Устройство Java]] **Источник**:: **Создана**:: [[2024-10-15]] **Автор**:: ### Дополнительные материалы - ### Дочерние заметки