Класс Configuration
- java.lang.Object
-
- java.lang.module.Configuration
public final class Configuration extends Object
Конфигурация, являющаяся результатом разрешения или разрешения с привязкой сервисов.
Конфигурация инкапсулирует граф читаемости, являющийся результатом разрешения. Граф читаемости — это ориентированный граф, вершины которого имеют тип ResolvedModule, а рёбра представляют читаемость между модулями. Configuration определяет метод modules() для получения набора разрешённых модулей в графе.
ResolvedModule определяет метод reads() для получения набора модулей, которые читает разрешённый модуль. Модули, которые читаются, могут быть в той же конфигурации или в конфигурациях родителей.
Конфигурация определяет метод resolve для разрешения набора корневых модулей и метод resolveAndBind для разрешения с привязкой сервисов. Существуют экземплярные и статические варианты обоих методов. Экземплярные методы создают конфигурацию с получателем как родительской конфигурацией. Статические методы предназначены для более сложных случаев, когда может быть более одной родительской конфигурации.
Каждый layer модулей в виртуальной машине Java создаётся из конфигурации. Конфигурация для boot слоя получается вызовом
ModuleLayer.boot().configuration(). Конфигурация для загрузчика часто является родителем при создании новых конфигураций.
Пример
В следующем примере используется метод resolve для разрешения модуля с именем myapp с конфигурацией для загрузчика в качестве родительской конфигурации. Он выводит имя каждого разрешённого модуля и имена модулей, которые каждый модуль читает.
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
Configuration parent = ModuleLayer.boot().configuration();
Configuration cf = parent.resolve(finder, ModuleFinder.of(), Set.of("myapp"));
cf.modules().forEach(m -> {
System.out.format("%s -> %s%n",
m.name(),
m.reads().stream()
.map(ResolvedModule::name)
.collect(Collectors.joining(", ")));
});
- Since:
- 9
- См. также:
ModuleLayer
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Configuration | empty() | Возвращает пустую конфигурацию. |
Optional<ResolvedModule> | findModule(String name) | Находит разрешённый модуль в этой конфигурации или, если его нет в этой конфигурации, в родительских конфигурациях. |
Set<ResolvedModule> | modules() | Возвращает неизменяемый набор разрешённых модулей в этой конфигурации. |
List<Configuration> | parents() | Возвращает список родительских конфигураций этой конфигурации, отсортированный по порядку поиска. |
Configuration | resolve(ModuleFinder before,
ModuleFinder after,
Collection<String> roots) | Разрешает набор корневых модулей, используя эту конфигурацию как родительскую, чтобы создать новую конфигурацию. |
static Configuration | resolve(ModuleFinder before,
List<Configuration> parents,
ModuleFinder after,
Collection<String> roots) | Разрешает набор корневых модулей для создания конфигурации. |
Configuration | resolveAndBind(ModuleFinder before,
ModuleFinder after,
Collection<String> roots) | Разрешает набор корневых модулей с привязкой сервисов и с этой конфигурацией как родительской, чтобы создать новую конфигурацию. |
static Configuration | resolveAndBind(ModuleFinder before,
List<Configuration> parents,
ModuleFinder after,
Collection<String> roots) | Разрешает набор корневых модулей с привязкой сервисов для создания конфигурации. |
String | toString() | Возвращает строковое описание этой конфигурации. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Методы
resolve
public Configuration resolve(ModuleFinder before,
ModuleFinder after,
Collection<String> roots) Разрешает коллекцию корневых модулей с этой конфигурацией в качестве родителя, чтобы создать новую конфигурацию. Этот метод работает точно так же, как и указанный статическим методом resolve при вызове с этой конфигурацией в качестве родителя. Другими словами, если эта конфигурация cf, то этот метод эквивалентен вызову:
Configuration.resolve(before, List.of(cf), after, roots);
- Параметры:
-
before- Поиск модулей перед модулей -
after- Поиск модулей после, если они не найдены вbeforeмодульном поиске или родительских конфигурациях -
roots- Возможная пустая коллекция имён модулей для разрешения - Возвращает:
- Конфигурация, полученная в результате разрешения указанных корневых модулей
- Выбрасывает:
-
FindException- Если разрешение завершается неудачей по каким-либо причинам, связанным с наблюдаемостью, указанным в статическом методеresolve -
ResolutionException- Если разрешение завершается неудачей из-за проверок согласованности, заданных в статическом методеresolve -
SecurityException- Если доступ к модулю запрещен менеджером безопасности
resolveAndBind
public Configuration resolveAndBind(ModuleFinder before,
ModuleFinder after,
Collection<String> roots) Разрешает коллекцию корневых модулей с привязкой сервисов и с этой конфигурацией в качестве родителя, чтобы создать новую конфигурацию. Этот метод работает точно так же, как и указанный статическим методом resolveAndBind при вызове с этой конфигурацией в качестве родителя. Другими словами, если эта конфигурация cf, то этот метод эквивалентен вызову:
Configuration.resolveAndBind(before, List.of(cf), after, roots);
- Параметры:
-
before- Поиск модулей перед модулей -
after- Поиск модулей после, если они не найдены вbeforeмодульном поиске или родительских конфигурациях -
roots- Возможная пустая коллекция имён модулей для разрешения - Возвращает:
- Конфигурация, полученная в результате разрешения с привязкой сервисов указанных корневых модулей
- Выбрасывает:
-
FindException- Если разрешение завершается неудачей по каким-либо причинам, связанным с наблюдаемостью, указанным в статическом методеresolve -
ResolutionException- Если разрешение завершается неудачей из-за проверок согласованности, заданных в статическом методеresolve -
SecurityException- Если доступ к модулю запрещен менеджером безопасности
resolve
public static Configuration resolve(ModuleFinder before,
List<Configuration> parents,
ModuleFinder after,
Collection<String> roots) Разрешает коллекцию корневых модулей для создания конфигурации.
Каждый корневой модуль находится с использованием указанного before модульного поиска. Если модуль не найден, он находится в родительской конфигурации, как если бы вызывался метод findModule для каждого родителя в порядке итерации. Если не найден, то модуль находится с использованием указанного after модульного поиска. Используется тот же порядок поиска для нахождения зависимостей. Корневые модули или зависимости, которые найдены в родительской конфигурации, больше не разрешаются и не включаются в результирующую конфигурацию.
Когда все модули перечислены, вычисляется граф читаемости и, в сочетании с экспортом модулей и использованием сервисов, проверяется на согласованность.
Разрешение может завершиться ошибкой FindException по следующим причинам, связанным с наблюдаемостью:
Корневой модуль или прямая или транзитивная зависимость не найдены.
Возникла ошибка при попытке найти модуль. Возможные ошибки включают ошибки ввода-вывода, ошибки, обнаруженные при разборе описателя модуля (
module-info.class) или две версии одного и того же модуля найдены в одном каталоге.
Разрешение может завершиться ошибкой ResolutionException при нарушении следующих проверок согласованности:
Обнаружен цикл, например, когда модуль
m1требует модульm2иm2требуетm1.Модуль считывает два или более модулей с одинаковым именем. Это включает случай, когда модуль считывает другой модуль с таким же именем, как и у него самого.
Два или более модулей в конфигурации экспортируют один и тот же пакет в модуль, который читает оба. Это включает случай, когда модуль
M, содержащий пакетp, считывает другой модуль, который экспортируетpвM.Модуль
Mзаявляет, что он "uses p.S" или "provides p.S with ...", но пакетpне находится ни в модулеM, ни экспортируется вMни одним модулем, которыйMсчитывает.
- Примечание по реализации:
- В реализации наблюдаемость модулей может зависеть от целостности ссылок или других проверок, которые гарантируют, что разные сборки тесно связанных модулей или модулей для определенных операционных систем или архитектур не объединяются в одной конфигурации.
- Параметры:
-
before- Поиск модулей перед модулями -
parents- Список родительских конфигураций в порядке поиска -
after- Поиск модулей после, если они не найдены вbeforeмодульном поиске или родительских конфигурациях -
roots- Возможная пустая коллекция имён модулей для разрешения - Возвращает:
- Конфигурация, полученная в результате разрешения указанных корневых модулей
- Выбрасывает:
-
FindException- Если разрешение завершается неудачей по любой причине, связанной с наблюдаемостью, указанной выше -
ResolutionException- Если разрешение завершается неудачей из-за каких-либо проверок согласованности, указанных выше -
IllegalArgumentException- Если список родителей пуст или список содержит два или более родителя с модулями для разных целевых операционных систем, архитектур или версий -
SecurityException- Если доступ к модулю запрещен менеджером безопасности
resolveAndBind
public static Configuration resolveAndBind(ModuleFinder before,
List<Configuration> parents,
ModuleFinder after,
Collection<String> roots) Разрешает коллекцию корневых модулей с привязкой сервисов для создания конфигурации.
Этот метод работает точно так же, как и resolve, за исключением того, что граф разрешенных модулей дополняется модулями, индуцированными отношением зависимости использования сервисов.
Более конкретно, корневые модули разрешаются как если бы вызывался resolve. Разрешенные модули и все модули в родительских конфигурациях с service dependences затем проверяются. Все модули, найденные указанными модульными поисками, которые provide реализацию одного или нескольких типов сервиса, добавляются в граф модулей, а затем разрешаются как если бы вызывался метод
resolve. Добавление модулей в граф модулей может ввести новые зависимости использования сервисов, поэтому процесс работает итеративно до тех пор, пока не будут добавлены больше модулей.
Поскольку привязка сервисов предполагает разрешение, она может завершиться ошибкой
FindException или ResolutionException по тем же причинам, что и в resolve.
- Параметры:
-
before- Поиск модулей перед модулями -
parents- Список родительских конфигураций в порядке поиска -
after- Поиск модулей после, если они не найдены вbeforeмодульном поиске или родительских конфигурациях -
roots- Возможная пустая коллекция имён модулей для разрешения - Возвращает:
- Конфигурация, полученная в результате разрешения с привязкой сервисов указанных корневых модулей
- Выбрасывает:
-
FindException- Если разрешение завершается неудачей по любой причине, связанной с наблюдаемостью, указанной в статическом методеresolve -
ResolutionException- Если разрешение завершается неудачей из-за проверок согласованности, указанных в статическом методеresolve -
IllegalArgumentException- Если список родителей пуст или список содержит два или более родителя с модулями для разных целевых операционных систем, архитектур или версий -
SecurityException- Если доступ к модулю запрещен менеджером безопасности
empty
public static Configuration empty()
Возвращает пустую конфигурацию. В пустой конфигурации нет модулей. У неё нет родителей.
- Возвращает:
- Пустая конфигурация
parents
public List<Configuration> parents()
Возвращает неизменяемый список родителей этой конфигурации в порядке поиска. Если это пустая конфигурация, то возвращается пустой список.
- Возвращает:
- Возможный пустой неизменяемый список родительских конфигураций
modules
public Set<ResolvedModule> modules()
Возвращает неизменяемый набор разрешенных модулей в этой конфигурации.
- Возвращает:
- Возможный пустой неизменяемый набор разрешенных модулей в этой конфигурации
findModule
public Optional<ResolvedModule> findModule(String name)
Находит разрешенный модуль в этой конфигурации или, если он отсутствует в этой конфигурации, в родительских конфигурациях. Поиск модуля в родительских конфигурациях эквивалентен вызову findModule для каждого родителя в порядке поиска, пока модуль не будет найден или все родители не будут проверены. В дереве конфигураций это эквивалентно поиске в глубину.
- Параметры:
-
name- Имя модуля разрешенного модуля для поиска - Возвращает:
- Разрешенный модуль с заданным именем или пустой
Optionalесли в этой конфигурации или родительских конфигурациях нет модуля с этим именем
toString
public String toString()
Возвращает строку, описывающую эту конфигурацию.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/module/Configuration.html