当前使用版本(必填,否则不予处理)
mybatis plus 3.5.2 jdk17
该问题是如何引起的?(确定最新版也有问题再提!!!)
第一次执行的时候静态设置capturingClass可访问出错,因为是final
重现步骤(如果有就写完整)
第一次执行语句的时候
报错信息
Unable to make field private final java.lang.Class java.lang.invoke.SerializedLambda.capturingClass accessible: module java.base does not "opens java.lang.invoke" to unnamed module @5884a914
我看代码是在ReflectLambdaMeta类里面静态加载的时候报错,位置在
static {
Field fieldCapturingClass;
try {
Class
FIELD_CAPTURING_CLASS = fieldCapturingClass;
}
Comment From: aboutZZ
临时补救办法:
Java启动参数加入:--add-opens=java.base/java.lang=ALL-UNNAMED
等作者修复
Comment From: Swedish-li
https://gitee.com/baomidou/mybatis-plus/issues/I4A7I5 https://gitee.com/baomidou/mybatis-plus/pulls/184 现在的警告是这个 pr 在 处理java 17 支持时留下的
Comment From: tomalloc
从java9开始就依赖模块化了,目前mybatis-plus有用到的几个lib是没有模块化的,mybatis-plus要完美支持是很难的。但并不是没有办法规避。对jdk来说,没有命名模块的都是unnamed模块。错误提示已经很明确了,可以在启动参数添加 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 来规避
Comment From: hnxiaoyuan
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED 加了这个,一样还是报警告,并没有用,
mybatis-plus-starter版本3.5.3.1,
spring-boot版本2.7.11,
openjdk17.0.2