module-info.java
Объявляйте модуль
«module-info.java» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Система модулей
Java Platform Module System (JPMS), представленная в Java 9, позволяет объединять пакеты в именованные модули с явно заданными зависимостями и границами.
Объявление размещается в специальном файле: module-info.java.
Зачем нужны модули
До появления модулей classpath представлял собой плоский, неструктурированный набор JAR-файлов. Любой код мог получить доступ к любому открытому классу, а отсутствующие зависимости обнаруживались только во время выполнения.
Модули добавляют строгую инкапсуляцию и надёжную конфигурацию, проверяемые во время компиляции и запуска.
Где находится module-info
module-info.java находится в корне дерева исходного кода, выше каталогов пакетов. Он компилируется в module-info.class в корне модуля.
Для каждого модуля существует ровно один такой файл.
Минимальное объявление
Самый простой модуль содержит только имя. По соглашению имена используют обратный DNS, как и имена пакетов.
module com.example.app {
}Объявление зависимости
Используйте requires, чтобы объявить зависимость от другого модуля. Каждый модуль неявно зависит от java.base, поэтому объявлять этот модуль не нужно.
module com.example.app {
requires java.sql;
requires java.logging;
}Открытие пакета
По умолчанию пакеты модуля скрыты. Используйте exports, чтобы сделать общедоступные типы пакета видимыми для других модулей.
module com.example.app {
exports com.example.app.api;
}Строгая инкапсуляция
Любой пакет, который вы не export, полностью недоступен извне, даже его общедоступные классы. В этом заключается главное отличие от мира пути классов.
Внутренние пакеты остаются внутренними — это обеспечивает JVM.
Правила именования модулей
Имена модулей подчиняются тем же лексическим правилам, что и имена пакетов: это идентификаторы, разделённые точками. Выбирайте стабильное глобально уникальное имя, поскольку другие модули зависят от него по имени.
Переименование модуля нарушает совместимость с его потребителями.
Более полный пример
Настоящее объявление объединяет requires и exports. Этот модуль зависит от системы журналирования и раскрывает только пакет с его общедоступным программным интерфейсом.
module com.example.orders {
requires java.logging;
requires com.example.payments;
exports com.example.orders.api;
}Компиляция модуля
Для компиляции используются флаги, учитывающие модули. Параметры --module-source-path и -d указывают компилятору, где находятся исходные файлы и вывод.
javac -d out --module-source-path src $(find src -name '*.java')java --module-path out --module com.example.app/com.example.app.Main
Путь модулей
Модули разрешаются из пути модулей (--module-path) — модульной замены пути классов. Перед запуском средство запуска читает дескриптор каждого модуля и строит граф зависимостей.
Быстрая проверка
Вспомните видимость пакетов по умолчанию.
Итоги
Вы изучили основы module-info.java:
- Один дескриптор на модуль в корне исходных файлов
requiresобъявляет зависимости;java.baseподразумеваетсяexportsраскрывает пакет; всё остальное инкапсулировано- Сборка и запуск выполняются с помощью
--module-pathи--module
Далее: подробное изучение директив requires и exports.
Часто задаваемые вопросы
Урок «module-info.java» бесплатный?
Да — полный текст урока «module-info.java» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «module-info.java»?
Объявляйте модуль Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «module-info.java»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- module-info.java
- requires и exports
- Сервисы с provides/uses
- Переход на модули