Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

module / requires / exports

Описание модуля в файле module-info.java: какие модули ему нужны и какие пакеты он открывает другим.

Доступно с: Java 9

Синтаксис

module name { requires other.module; exports some.package; }

Примеры

Файл module-info.java в корне исходников:

// src/module-info.java
module com.shop.app {
    requires java.net.http;
    requires java.sql;
    exports com.shop.api;
}

Какому модулю принадлежит класс и какие пакеты модуль экспортирует:

void main() {
    IO.println(String.class.getModule().getName());
 
    Module sql = java.sql.Connection.class.getModule();
    IO.println(sql.getName());
    IO.println(sql.getDescriptor().exports().stream()
        .map(ModuleDescriptor.Exports::source)
        .sorted()
        .toList());
 
    IO.println(getClass().getModule().isNamed());
}

Результат:

java.base
java.sql
[java.sql, javax.sql]
false

Примечания

requires подключает модуль, exports делает публичные классы пакета доступными другим модулям; неэкспортированные пакеты скрыты даже от public. requires transitive передаёт зависимость дальше, opens разрешает рефлексию (нужно фреймворкам вроде Spring и Jackson). Код без module-info.java попадает в безымянный модуль и видит всё — так работает большинство приложений и все примеры этого справочника. Модульный проект обычно собирает Maven или Gradle, а запускают его через путь модулей: java -p out -m com.shop.app/com.shop.app.Main.

См. также

  • import / package — package задаёт пакет файла, import позволяет писать короткие имена классов из других пакетов.
  • public / protected / private — Модификаторы доступа задают, откуда виден класс, поле, метод или конструктор.
  • Object.getClass() — Возвращает класс объекта во время выполнения.

В учебнике

  • Модули — Система модулей Java — module-info.java, requires и exports, проект из двух модулей, сборка javac --module-source-path и запуск java --module-path, модули самого JDK.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.