JDK9以上的非法反射访问警告

356 阅读1分钟

参考:解决JDK9以上的非法反射访问警告

 总结

解决的办法是添加如下两个JVM参数:

JDK17测试可行

java --add-opens java.base/java.lang=ALL-UNNAMED -jar /home/ruoyi-admin.jar --spring.profiles.active=prod

这个也行,但是前面那个参数少

--illegal-access=deny --add-opens java.base/java.lang=ALL-UNNAMED

--illegal-access=denyJava 9 开始引入的一个 JVM 参数。当使用这个参数时,Java 虚拟机会在运行时严格限制访问非公开 API 的行为。非公开 API 是指在 Java API 文档中未公开或标记为不稳定的 API。

这个参数的作用是禁止通过反射等方式来访问非公开 API,以提高程序的安全性和可靠性。如果存在非公开 API 的访问,应用程序可能会在运行时出现错误或异常。

--add-opens 参数是 Java 9 提供的另一个 JVM 参数,用于在运行时打开指定的包以使其可以访问非公开 API。这个参数可以避免因为访问非公开 API 而导致的程序错误或异常。

具体来说,--add-opens java.base/java.lang=ALL-UNNAMED 参数的含义是将所有未命名模块中的包 java.lang 打开,以使其可以访问非公开 API。这是一种为了兼容老版代码而提供的一种权宜之计,但并不推荐在生产环境中使用。

在 Java 11 及以后的版本中,--illegal-access 参数默认是 deny,并且 --add-opens 参数也被移除。这意味着对于使用了非公开 API 的代码,需要进行相应的修改,以适应最新的 Java 版本。