InaccessibleObjectException после миграции с Java 8 на Java 11 - PullRequest
0 голосов
/ 05 ноября 2019

Я перевожу довольно большое приложение монолитной пружинной загрузки с Java 8 на Java 11. После того, как я исправил удаленные модули JEE, я столкнулся с несколькими ошибками отражения, основанными на сильной инкапсуляции новой представленной концепцией модульной системы.

Запуск приложения работает с Java 11, однако чистая установка через Maven не работает. Есть несколько тестовых сбоев, вызванных InaccessibleObjectException из-за отражения против сильной инкапсуляции.

java.lang.reflect.InaccessibleObjectException: Unable to make field private jdk.internal.reflect.MethodAccessorImpl jdk.internal.reflect.DelegatingMethodAccessorImpl.delegate accessible: module java.base does not "opens jdk.internal.reflect" to unnamed module @6a969fb8 at com......(some Test-Method).

Я уже пробовал решение, предложенное в этом посте Как решить InaccessibleObjectException ("Невозможно сделать {member} доступным: модуль {A} не 'открывает {package}' для {B}") в Java 9? .

Но ни с использованием параметра --add-открывает файл java.base / jdk.internal.reflect = ALL-UNNAMED в качестве аргумента Maven и не сохраняет его в файле maven jvm.config.

Существуют ли другие способы избавления от этихИсключения

1 Ответ

1 голос
/ 06 ноября 2019

Вы должны добавить эти флаги не в сам maven, а в свои тестовые конфигурации, поскольку тесты, вероятно, выполняются в отдельном jvm: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html

<argLine>

Произвольные параметры JVM дляустановить в командной строке. Свойство пользователя: argLine.

Или какой-либо другой флаг, похожий на другой тестовый плагин, если вы используете что-то другое.

Обратите внимание, что вы также, вероятно, можете исправить некоторые из этих проблемвообще не используя этот внутренний API, поэтому сначала попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...