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 , не будет видимым для других модулей.