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

新手上路,请多包涵

我的 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触发的这个warning的具体问题;它不是 JDK9 的副本:发生了非法反射访问操作。 org.python.core.PySystemState 处理不同库中的类似症状。

原文由 Jan Nielsen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

在 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

无需报告;这是一个 已知的 Spring 错误

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

更新

JDK 9+ 和 Spring 5.1+ 提供了此问题的修复程序。

原文由 Jan Nielsen 发布,翻译遵循 CC BY-SA 3.0 许可协议

这在 JDK 11 和 Spring Boot 2.2.1(Spring Core 5.2.1)上也发生在我身上。

正如对 Spring Framework 问题 #22814一些 评论 中所建议的那样,有助于消除对 org.springframework.boot:spring-boot-devtools 的依赖。

原文由 Cos64 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题