如何解决Guice错误,“发生了非法的反射访问操作”

时间:2019-09-30 10:27:23

标签: kotlin guice java-11

我有一个Kotlin项目,它使用Guice for DI,并且最近从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

该警告应如何解决?

1 个答案:

答案 0 :(得分:2)

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

此外,从 Java 16 开始,此警告变为错误,必须手动指定执行标志 --illegal-access=permit 以重现 Java 9-15 的行为。

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