非法反光访问 org.springframework.cglib.core.ReflectUtils$1

2022-08-31 15:08:21

我的 JDK 9+181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLI 应用程序在启动时显示此警告:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.RELEASE.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 org.springframework.cglib.core.ReflectUtils$1

这是一个控制台应用程序,所以我需要禁用此警告 - 我该怎么做?

注意:这个问题提出了如何禁用由Spring触发的警告的具体问题;它不是JDK9的副本:发生了非法的反射访问操作。 org.python.core.PySystemState,它处理不同库中的类似症状。


答案 1

在 JDK 9+ 中,将以下选项添加到 JVM 以禁用 Spring 使用 CGLIB 的警告:

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

例如:

java --add-opens java.base/java.lang=ALL-UNNAMED -jar target/*.jar

无需报告;这是一个已知的春季虫子

发生这种情况是因为新的JDK 9模块系统检测到非法访问,该访问将在(不久)将来的某个时候被禁止。您可以在此处阅读有关 JDK 9 模块系统的更多信息

更新

此问题的修复程序是带有 Spring 5.1+ 的 JDK 9+ 版本。


答案 2

在JDK 11和Spring Boot 2.2.1(Spring Core 5.2.1)上也发生了这种情况。

有帮助的是删除了对 的依赖关系,正如对Spring Framework问题#22814一些评论所建议的那样。org.springframework.boot:spring-boot-devtools


推荐