0Pricing
Java Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. module-info.java
  2. requires и exports
  3. Сервисы с provides/uses
  4. Переход на модули
← Назад к Java Academy