Не удалось сделать поле статическим окончательным java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP
У меня есть клиент Spring Feign, который отправляет объект POJO в удаленную конечную точку с помощью POST, и запуск моего приложения не выполняется с указанными ниже исключениями.
java.lang.reflect.InaccessibleObjectException: невозможно сделать поле static final java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP доступным: модуль java.base не «открывает java.lang.invoke» в безымянный модуль @420a85c4
Below the dependencies I am using in my application.
java version: 17
spring boot version: 2.5.3
spring boot cloud version: 2020.0.3
spring boot starter openfeign version: 2.2.8.RELEASE
As recommended in https://github.com/OpenFeign/feign/issues/935, I had tried
workaround solution: Adding this jvm option '--add-opens java.base/java.lang.invoke=ALL-
UNNAMED' worked.
Любые другие альтернативные предложения, кроме аргумента jvm, приветствуются.
4 ответа
Установите версию OpenFeign не ниже 11.7, в которой эта проблема решена.
Если вы используете плагин Spring Dependency Management, вы можете сделать это так (пример Gradle):
dependencyManagement {
dependencies {
dependencySet(group: 'io.github.openfeign', version: '11.7') {
entry 'feign-core'
entry 'feign-jackson'
entry 'feign-slf4j'
entry 'feign-soap'
entry 'feign-jaxb'
}
}
}
Для меня это сработало, чтобы добавить следующий вариант JVM:
--add-opens java.base/java.lang.invoke=ALL-UNNAMED
У меня такая же ошибка, когда я объявляю метод по умолчанию (метод с реализацией) в классе интерфейса, отмеченном
Для JDK 9+, если вы используете параметры JVM для устранения проблемы, добавьте еще один
=
в опции JVM: например
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED