Spec-Zone.ru › OpenJDK 17

Класс 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(", ")));
    });
 
С:
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()
Возвращает пустую конфигурацию. В пустой конфигурации нет модулей. У неё нет родителей.
Возвращает:
Пустую конфигурацию

родители

public List<Configuration> parents()
Возвращает список родителей этой конфигурации, неизменяемый, в порядке поиска. Если это пустая конфигурация, то возвращается пустой список.
Возвращает:
Возможный пустой неизменяемый список родительских конфигураций

модули

public Set<ResolvedModule> modules()
Возвращает неизменяемый набор решённых модулей в этой конфигурации.
Возвращает:
Возможный пустой неизменяемый набор решённых модулей в этой конфигурации

findModule

public Optional<ResolvedModule> findModule(String name)
Ищет разрешенный модуль в этой конфигурации или, если его нет в этой конфигурации, в родительских конфигурациях. Поиск модуля в родительских конфигурациях эквивалентен вызову findModule для каждой родительской конфигурации в порядке поиска, пока модуль не будет найден или все родительские конфигурации не будут проверены. В дереве конфигураций это эквивалентно поиску в глубину.
Параметры:
name - Имя модуля разрешенного модуля для поиска
Возвращает:
Разрешенный модуль с заданным именем или пустой Optional , если в этой конфигурации или любой родительской конфигурации нет модуля с этим именем

toString

public String toString()
Возвращает строку, описывающую эту конфигурацию.
Переопределяет:
toString в классе Object
Возвращает:
Возможная пустая строка, описывающая эту конфигурацию

© 1993, 2021, 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/17/docs/api/java.base/java/lang/module/Configuration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API