oracle 无法使字段成为静态最终java.lang.invoke,方法句柄$Lookup java.lang.invoke,方法句柄$Lookup.IMPL_LOOKUP

eagi6jfj  于 2022-12-03  发布在  Oracle
关注(0)|答案(4)|浏览(191)

我有一个Spring Feign客户端,它使用POST将POJO对象发送到远程端点,我的应用程序启动失败,出现以下异常。
异常错误:无法使字段成为静态最终java.lang.invoke.方法句柄$Lookup java.lang.invoke.方法句柄$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参数之外的任何其他替代建议都是非常受欢迎的。

yuvru6vn

yuvru6vn1#

强制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'
            }
        }
    }
jqjz2hbq

jqjz2hbq2#

对我来说,添加以下JVM选项是有效的:

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

e3bfsja23#

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

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

bqf10yzr4#

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

相关问题