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

Java org.springframework.cglib.core.reflectilitals$1的非法反射访问,java,spring,spring-boot,java-9,java-module,Java,Spring,Spring Boot,Java 9,Java Module,我的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-

我的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触发的此警告的具体问题;它不是另一个库中处理类似症状的重复项。

在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+可以解决此问题。

添加到上面的Jan Nielsen答案中,如果您使用的是Intellij和Spring Boot 2.0.3,这取决于Spring core 5.0.7,您仍然无法解决此问题

我的出路需要两件事:

  • 将Jan提到的--Add opens添加到运行/调试配置中。只需编辑配置并查看环境/VM选项。这将使一些“非法访问消息”保持沉默

  • 我还需要向jaxbapi库添加一个依赖项。我从瓦伦丁博西的评论中得到了暗示


使用spring初始值设定项时,请确保使用最新版本的spring Boot。它会自动为您获取SpringCore5.1或更高版本,您在运行项目时不会看到错误


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

在这些警告之后,如果您的应用程序仍然无法工作,请将此依赖项添加到pom.xml中

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

javax.xml.bind
jaxb api
2.3.0

这对我有帮助

我在JDK 11和Spring Boot 2.2.1(Spring Core 5.2.1)上也遇到过这种情况


帮助的是删除了对
org.springframework.boot:spring boot devtools
的依赖关系,如中所述。

我正在使用这些版本,但仍然看到警告:

  • SpringBoot 2.4.1
  • SpringCoreFW:5.3.2(我的父pom是SpringBoot的,所以这个版本是由它引入的,不是我手动设置的)
  • Java openjdk版本“11.0.9.1”2020-11-04
从spring boot devtools中删除依赖项对我来说也很有效,并且在启动时警告不再存在

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

org.springframework.boot
:

运行完全打包的应用程序时,开发人员工具将自动禁用。如果您的应用程序是使用java-jar启动的,或者是使用特殊的类加载器启动的,那么它被认为是“生产应用程序”


因此,当从命令行启动应用程序时,警告应该消失(我还没有验证)。

如果您使用maven和spring,请升级到spring Framework 5.1+/spring Boot 2.1+。

我使用spring Boot 2.0.0.RC1和JDK 9.0.4,并且面临同样的问题。你能解释一下这个把戏吗?开关是什么意思?我在这里也看到了。我很难为IntelliJ IDEA设置JVM选项。“我不知道如何克服。”多胡维——考虑问一个关于如何做到这一点的新问题。您可以在这里找到更多信息:我在这里添加了一个问题:这个问题似乎也出现在JDK 10中-您能解释一下我如何向JVM添加
--添加opens java.base/java.lang=ALL-UNNAMED
?我不知道如何编辑它。我在5.3.3上得到了这个。Spring引导版本2.4.2