无法将字段设置为静态不可变的java.lang.invoke.MethodHandles$Lookup java.lang.invoke.MethodHandles$Lookup.IMPL_LOOKUP。

8

我有一个Spring Feign客户端,使用POST方法将POJO对象发送到远程端点,但我的应用程序启动失败,出现以下异常。

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参数之外的其他替代建议,欢迎提出。


3
我在使用Spring Feign客户端时,在Open JDK 17上遇到了完全相同的问题。 - chris_g
4个回答

4

将OpenFeign版本强制至少为11.7,该版本已解决此问题

如果您正在使用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

0

对于JDK 9+,如果您使用JVM选项来解决问题,请在JVM选项中添加另一个=: 例如:

--add-opens=java.base/java.lang.invoke=ALL-UNNAMED

0

当我在标记有@FeignClient的接口类中声明默认方法(带有实现的方法)时,我遇到了相同的错误。我只需删除默认方法,错误就消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接