Spec-Zone.ru › OpenJDK 21

Класс 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 с конфигурацией для уровня загрузки в качестве родительской конфигурации. Он выводит имя каждого разрешенного модуля и имена модулей, которые каждый модуль читает.

   Path dir1 = ..., dir2 = ..., dir3 = ...;
   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()
Возвращает неизменяемый набор решённых модулей в этой конфигурации.
Возвращает:
Возможный пустой неизменяемый набор решённых модулей в этой конфигурации
END_OF_DOCUMENT_MARKER

findModule

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

toString

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

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

Spec-Zone.ru

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