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

问题描述 投票:33回答:4

我的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的副本,它处理不同库中的类似症状。

java spring spring-boot java-9 java-module
4个回答
49
投票

在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+。


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
投票

使用spring初始化程序时,请确保使用最新版本的Spring Boot。它会自动获取Spring核心5.1或更高版本,并且在运行项目时不会看到错误。

因此,您不必担心编辑任何JVM配置。


1
投票

发出这些警告后,如果您的应用仍无法正常工作,请将此依赖项添加到您的pom.xml中

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

这对我有帮助!!

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