Java Language
Модули
Поиск…
Синтаксис
- требует java.xml;
- требует публичного java.xml; # предоставляет модуль иждивенцам для использования
- экспортирует com.example.foo; # иждивенцы могут использовать общедоступные типы в этом пакете
- экспортирует com.example.foo.impl в com.example.bar; # ограничение использования модуля
замечания
Использование модулей поощряется, но не требуется, это позволяет существующему коду продолжать работать на Java 9. Он также обеспечивает постепенный переход к модульному коду.
Любой немодульный код помещается в неназванный модуль при компиляции. Это специальный модуль, который может использовать типы из всех других модулей, но только из пакетов с декларацией exports
.
Все пакеты в неназванном модуле экспортируются автоматически.
Ключевые слова, например module
т. Д., Ограничены в использовании в объявлении модуля, но могут быть использованы в качестве идентификаторов в другом месте.
Определение базового модуля
Модули определяются в файле с именем module-info.java
, называемом дескриптором модуля. Он должен быть помещен в корень исходного кода:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Вот простой описатель модуля:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
Имя модуля должно быть уникальным, и рекомендуется использовать одну и ту же нотацию имен DNS-реверса, используемую пакетами, чтобы обеспечить это.
Модуль java.base
, который содержит базовые классы Java, неявно виден любому модулю и не нуждается в его включении.
requires
декларация позволяет использовать другие модули, в примере модуль java.httpclient
импортируется.
Модуль также может указывать, какие пакеты он exports
и, следовательно, делает его видимым для других модулей.
Пакет com.example.foo
объявлен в exports
пункта будет виден другим модулям. Любые com.example.foo
не будут экспортироваться, им нужны собственные декларации export
.
И наоборот, com.example.bar
который не указан в предложениях exports
, не будет видимым для других модулей.