Ответ
Модули в Java — это функциональные единицы инкапсуляции, введенные Java Platform Module System (JPMS) в Java 9. Они описываются файлом module-info.java и позволяют явно декларировать зависимости (requires) и публичный API (exports).
Являются ли модули частью одного проекта? Да, модули обычно являются частью одного проекта, но они организуют его код в логически изолированные компоненты с четкими границами. Однако модуль также может быть самостоятельной библиотекой, используемой в разных проектах.
Цели модулей:
- Надежная инкапсуляция: Скрытие внутренних пакетов от внешнего мира.
- Явное объявление зависимостей: Устранение проблем classpath.
- Улучшение структуры приложения: Разделение на компоненты.
Пример структуры проекта с двумя модулями:
my-application/
├── module-a/
│ ├── src/main/java/
│ │ ├── com.example.a.internal/ // Внутренний, не экспортируемый пакет
│ │ ├── com.example.a.api/ // Публичный API
│ │ └── module-info.java
│ └── pom.xml (или build.gradle)
└── module-b/
├── src/main/java/
│ ├── com.example.b/
│ └── module-info.java
└── pom.xml
Содержимое module-info.java:
// module-a/module-info.java
module com.example.module.a {
exports com.example.a.api; // Только этот пакет виден извне
// Пакет 'internal' скрыт
}
// module-b/module-info.java
module com.example.module.b {
requires com.example.module.a; // Явная зависимость от модуля A
// Теперь код в module-b может использовать только public-типы из com.example.a.api
}
Вывод: Модули — это способ организации кода внутри проекта в независимые, хорошо определенные компоненты с контролируемыми зависимостями, что упрощает сборку, тестирование и поддержку.