如何修复 Guice 错误“发生了非法反射访问操作”

问题描述 投票:0回答:3

我有一个使用 Guice 进行 DI 的 Kotlin 项目,最近已从 JDK 8 -> 11 更新。它现在在运行时发出以下错误:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/matt/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/4.2.2/6dacbe18e5eaa7f6c9c36db33b42e7985e94ce77/guice-4.2.2.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

应如何解决此警告?

kotlin guice java-11
3个回答
9
投票

该问题是由于 Guice 内部访问 Java 对象的方式造成的,这在新的(Java 9+)Java 模块系统下是不安全的。

此外,从 Java 16 开始,此警告变为错误,必须手动指定执行标志

--illegal-access=permit
才能重现 Java 9-15 的行为。

你无能为力来修复它;最好的选择是升级到 Guice 5.0.1,该版本已打补丁以避免非法访问。您的警告将会消失,您的应用程序将在 Java 16+ 上以默认 JVM 行为运行。


2
投票

如前所述,最好升级到 Guice 5,其中已更新。

但是...以防万一您在升级之前一直使用 Guice 4,只需使用这些额外参数启动 java:

java --illegal-access=permit --add-opens java.base/java.lang=ALL-UNNAMED ...

你就可以出发了!!


0
投票

可能有语法错误 例子 场景:abc

如果您输入如下 场景:abc ---- 你会得到上面的错误

© www.soinside.com 2019 - 2024. All rights reserved.