总结
解决的办法是添加如下两个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=deny 是 Java 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 版本。