当前使用版本(必填,否则不予处理)

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 aClass = SerializedLambda.class; fieldCapturingClass = (Field)ReflectionKit.setAccessible(aClass.getDeclaredField("capturingClass")); } catch (Throwable var2) { log.warn(var2.getMessage()); fieldCapturingClass = null; }

    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