Справочная информация:
Это проблема видимости загрузчика классов, которая в основном возникает, когда старые конфигурации (например, до 2017 года) переносятся в приложения, использующие MicroProfile. В Liberty API были классифицированы по следующим категориям:
api
(например, API JavaSE)
spec
(например, API JavaEE)
ibm-api
(например, com.ibm.websphere.*
API)
third-party
(например, org.eclipse.persistence.*
API из функции JPA 2.1)
По умолчанию api,spec,ibm-api
видны приложениям, а это означает, что third-party
- нет (поскольку сторонние библиотеки могут нарушать изменения, которые нарушают политику нулевой миграции Liberty).
Затем, когда появились функции MicroProfile, они не вписывались ни в одну из вышеуказанных категорий API (не достаточно универсально, чтобы считаться spec
, но более стабильными, чем third-party
), поэтому мы создали новый API Тип видимости:
stable
(например, org.eclipse.microprofile.*
API)
Новый тип API stable
теперь включен по умолчанию, поэтому приложения могут видеть эти API.
Объяснение вопроса:
Поскольку ваш apiTypeVisibility
был жестко запрограммирован в spec, ibm-api, api, third-party
, это фактически исключало новый тип API stable
, под которым были классифицированы API MicroProfile. Чтобы решить эту проблему, вы можете указать:
<classloader apiTypeVisibility="spec, stable, ibm-api, api, third-party"/>
Это довольно многословно, и все, что вы действительно пытаетесь сделать, - это сделать видимыми third-party
API, в дополнение к тому, что вы получаете по умолчанию. По этой причине с 18.0.0.3 теперь вы можете использовать синтаксис "chmod style" для предоставления или отмены отдельных типов API со знаками +
или -
. Например, приведенная выше конфигурация <classloader>
эквивалентна:
<!-- Read as: In addition to default values, also grant 'third-party' api type visibility -->
<classloader apiTypeVisibility="+third-party"/>
Дополнительные ресурсы: