Являются ли модификаторы JPMS «статическими» и «транзитивными» несовместимыми?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Являются ли модификаторы JPMS «статическими» и «транзитивными» несовместимыми?

Сообщение Anonymous »

Инструкция JPMS требует может иметь два квалификатора: static и транзитивный. Для модуля foo:
  • Код: Выделить всё

    requires static bar;
    делает разрешение модуля bar необязательным во время выполнения,
  • Код: Выделить всё

    requires transitive bar;
    позволяет каждому модулю, который читает foo, также читать bar. Согласно Javadoc java.lang.module это также означает, что bar должен присутствовать как во время компиляции, так и во время выполнения.
Однако разрешен третий вариант:

Код: Выделить всё

module foo {
requires static transitive bar;
}
Что должна делать эта комбинация?
Согласно Javadoc:

Код: Выделить всё

requiresДирективы 
, имеющие модификатор static, выражают необязательную зависимость во время выполнения. Если модуль заявляет, что ему требуется статический M, то разрешение не ищет наблюдаемые модули для M, чтобы удовлетворить зависимость. Однако если M рекурсивно перечисляется на шаге 1, то все модули, которые перечисляются и требуют статического M, будут читать M.

где «шаг 1» описывает вычисление замыкания набора корневых модулей X, требующее транзитивного отношения Y.
Если я правильно интерпретирую это, если директива require является одновременно статической и транзитивной, модуль foo не обязателен, так как «шаг 1» требует его присутствия.
Мы часто получаем такие директивы при использовании bnd-maven-plugin, который сопоставляет директиву OSGi разрешения:=optional со статической, а директиву Uses:=... с транзитивной.

Подробнее здесь: https://stackoverflow.com/questions/776 ... compatible
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»