0Pricing
Java Academy · Урок

Переход на модули

Автоматические и безымянные модули

«Переход на модули» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Модулизация существующего кода

Немногие проекты используют модули с самого начала. JPMS разработан для постепенной миграции, позволяя пути классов и пути модулей сосуществовать.

Ключевую роль играют автоматические модули и безымянный модуль.

Безымянный модуль

Всё, что загружено из пути классов, находится в едином безымянном модуле. Он читает все остальные модули и раскрывает все свои пакеты.

Это мост, благодаря которому устаревший код пути классов продолжает работать.

Именованный модуль не может читать безымянный

Ключевое правило: явный именованный модуль не может зависеть от безымянного модуля. Нельзя записать requires для кода из пути классов.

Поэтому выполняйте миграцию снизу вверх: сначала преобразуйте представление зависимостей.

Автоматические модули

Поместите обычный немодульный JAR в путь модулей, и он станет автоматическим модулем. Он получит автоматически выведенное имя, будет читать все остальные модули и раскроет все свои пакеты.

Это позволяет именованным модулям использовать requires для JAR, в котором ещё нет module-info.

Откуда берётся имя

Имя автоматического модуля выводится в следующем порядке предпочтения:

  • Запись Automatic-Module-Name в манифесте JAR, если она присутствует
  • Иначе из имени файла JAR: версия удаляется, а дефисы заменяются точками

Важность стабильных имён

Разработчикам библиотек следует добавить Automatic-Module-Name в манифест до полной модулизации. Это гарантирует стабильное имя модуля, поэтому последующие объявления зависимостей сохранятся при появлении настоящего module-info.

Automatic-Module-Name: com.example.json

Стратегия сверху вниз

Рекомендуемый подход для вашего приложения:

  • Оставьте зависимости автоматическими модулями в пути модулей
  • Сначала добавьте module-info.java в главный модуль приложения
  • Объявите зависимости от имён этих автоматических модулей

Пример шага миграции

Предположим, что guava-32.jar находится в пути модулей как автоматический модуль com.google.common. Ваш модуль приложения уже может объявить зависимость от него.

module com.example.app {
    requires com.google.common;
    exports com.example.app.api;
}

Проблема разделённых пакетов

Модульная система запрещает двум модулям содержать один и тот же пакет. Старые библиотеки, разделяющие пакет между несколькими JAR-файлами, вызывают ошибки.

Исправьте это, объединив JAR-файлы, используя --patch-module или обновив версии, устраняющие разделение.

Проблемы доступа при отражении

Фреймворки, выполняющие глубокое отражение, могут завершиться ошибкой InaccessibleObjectException после модулизации. Добавьте директивы opens или, как временный мост, используйте флаг запуска --add-opens.

Полезный инструмент анализа зависимостей

Инструмент jdeps анализирует ваши JAR-файлы, сообщает о зависимостях, выявляет использование внутренних программных интерфейсов JDK и даже может создать предварительный вариант module-info.java с помощью jdeps --generate-module-info.

Сначала запустите его, чтобы спланировать миграцию.

Быстрая проверка

Вспомните, как обычный JAR получает идентичность модуля.

Итоги

Вы изучили методы миграции:

  • Код пути классов находится в безымянном модуле; именованные модули не могут объявлять зависимость от него
  • Обычные JAR-файлы в пути модулей становятся автоматическими модулями
  • Задавайте Automatic-Module-Name для стабильных имён
  • Следите за разделёнными пакетами и доступом при отражении; используйте jdeps для планирования

На этом курс JPMS завершён.

Часто задаваемые вопросы

Урок «Переход на модули» бесплатный?

Да — полный текст урока «Переход на модули» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Переход на модули»?

Автоматические и безымянные модули Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Переход на модули»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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