无法使字段静态最终 java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP
Posted
技术标签:
【中文标题】无法使字段静态最终 java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP【英文标题】:Unable to make field static final java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP 【发布时间】:2021-11-26 05:55:29 【问题描述】:我有一个 Spring Feign 客户端,它使用 POST 将 POJO 对象发送到远程端点,我的应用程序启动失败,出现以下异常。
java.lang.reflect.InaccessibleObjectException: 可访问:模块 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 参数之外的任何其他替代建议。
【问题讨论】:
我在使用 Spring Feign 客户端的 Open JDK 17 上遇到了同样的问题 【参考方案1】:强制 OpenFeign 版本至少为 11.7,这解决了这个issue。
如果您使用的是 Spring 依赖管理插件,那么您可以这样做(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'
【讨论】:
【参考方案2】:对我来说,添加以下 JVM 选项很有效:
--add-opens java.base/java.lang.invoke=ALL-UNNAMED
【讨论】:
以上是关于无法使字段静态最终 java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP的主要内容,如果未能解决你的问题,请参考以下文章
通过对象访问时,静态最终字段和在声明时初始化的实例最终字段之间的差异[重复]