【教程】JFinal项目解决使用java17+遇到的问题

最近,很多JBolt极速开发平台的成员,开始尝新,使用java17 甚至java19 去开发和部署。

我表示,慎重一点,因为我还在用java8,(#^.^#)。


成员反馈使用Java17 + 遇到这个问题:

image.png

java.lang.reflect.InaccessibleObjectException: 
Unable to make protected native java.lang.Object java.lang.Object.clone() 
throws java.lang.CloneNotSupportedException accessible: 
module java.base does not "opens java.lang" to unnamed module @c8c12ac


这个不光JFinal有这个问题,SpringBoot运行也这样,

错误的原因是因为 JVM 的模块 java.base 没有对未命名的模块开放 java.lang 这个包的深度反射 API 的调用权限。 具体来说,是没有开放 setAccessible(true) API。

这个问题在 JDK 8 以及以上的版本容易遇到。 解决的方法是在启动 Java 应用的时候, 加上参数指定开放特定的 Module/Package,使得 unnamed module 可以访问指定的 package 下面的深度反射 API。 如果有多个 Package 需要开放深度反射 API,那么可以指定多个 --add-opens 参数。

解决它:

image.png

加上JVM参数配置:

--add-opens java.base/java.lang=ALL-UNNAMED

image.png


这样,就可以了。

注意:相应的pom.xml 里关于jdkversion的配置 需要转为17

image.png

打包部署后,在对应的jfinal.sh 或者 jfinal.bat 脚本里也配置上jvm参数即可。


image.png

加我微信,交个朋友

18766735632

image.png


【教程】FastJson和Jackson中定制JFinal Record序列化

【推荐】极致追求JFinal最佳实践的极速开发平台

【分享】解决JFinal-Mysql下代码生成无法获取到数据库表注释信息

【分享】一篇文章让你学通JFinal的各种参数解析方式

【教程】如何屏蔽掉JFinal的ProxyGenerator中输出的debug日志?


评论区

热门分享

扫码入社