我的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: An illegal reflective access operation has occurred. org.python.core.PySystemState的副本,它处理不同库中的类似症状。
答案 0 :(得分:48)
在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
无需报告;这是一个known Spring bug。
这是因为新的JDK 9模块系统检测到非法访问,将来(近)将被禁止访问。您可以阅读有关the JDK 9 Module system here的更多信息。
<强>更新强>:
针对此问题的修复程序可以使用带有Spring 5.1 +的JDK 9+。
答案 1 :(得分:7)
在JDK 11和Spring Boot 2.2.1(Spring Core 5.2.1)上,我也遇到了这种情况。
如some comments至Spring Framework issue #22814中所建议的那样,帮助消除了对org.springframework.boot:spring-boot-devtools
的依赖性。
答案 2 :(得分:3)
在上面添加Jan Nielsen的答案,如果您使用的是依赖于Spring核心5.0.7的Intellij和Spring Boot 2.0.3,那么您仍然无法解决问题。
我的出路需要两件事:
将Jan提到的 - add-opens 添加到您的运行/调试配置中。只需编辑配置并查看“环境/ VM选项”下的内容。这样可以消除一些“非法访问消息”。
我还需要为 jaxb-api 库添加依赖项。我得到了ValentinBossi关于this spring github issue的评论的提示。
答案 3 :(得分:3)
使用spring初始值设定项时,请确保使用最新版本的Spring Boot。它会自动为您提供Spring core 5.1或更高版本,并且在运行项目时您不会看到错误。
因此,您不必担心编辑任何JVM配置。
答案 4 :(得分:2)
我正在使用这些版本,但仍然看到警告:
从 spring-boot-devtools 中删除依赖项也对我有用,并且在启动时不再出现警告。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
... 在一天结束时,我只是在类路径发生任何变化时使用从我的 IDE 自动重新启动,我可以不用它就离开。 然而,问题是理论上我们不应该担心它,因为根据Spring documentation:
<块引用>在运行完全打包的应用程序时会自动禁用开发者工具。如果您的应用程序是使用 java -jar 启动的,或者是使用特殊的类加载器启动的,则它被视为“生产应用程序”
因此,当从命令行启动应用程序时,警告应该会消失(我尚未验证)。
答案 5 :(得分:1)
这些警告之后,如果您的应用仍无法正常工作,则将此依赖项添加到pom.xml中。
<Button
android:id="@+id/button1"
android:background="@drawable/ripple"
android:text="Login"/>
这对我有帮助!
答案 6 :(得分:-1)
如果您使用 maven 和 spring,请升级到 Spring Framework 5.1+ / Spring Boot 2.1+。