Unable to make {member} accessible: module {A} does not 'opens {package}' to {B} java11初次接触
自己本身要写一个javafx小工具,因为要使用的mybatis框架来连接数据库,但因为很久没有写纯java环境了,所以今天遇到了个小问题准备记录一下
环境:idea
框架:javafx+mybatis+java(非spring框架)
版本:java11+mysql8
代码其实就是一个mybatis的demo 无任何多余操作
这里主要要讲述的是错误,当代码执行到要去查询的sql时,会出现一个错误


根据这个错误,我找一下网上的原因 大多是讲述这是一种错误叫法:
Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}
错误的大概意思是 java.base 包没有开放到任意模块下,而模块又通过反射使用了一些包内的属性值,这样的操作是不允许的。这种情况一般在使用高于 Java 8 版本的 JDK 时会出现,原因是在 Java 9 及之后的版本对源码进行了模块化重构,public 不再意味着完全开放,而是使用了 export 的机制来更细粒度地控制可见性。
问题大概就是版本升级一些老的反射获取属性方式发生了修改,java保护源码能力改变。需要手动来模块化
网上给的解决方法是在启动时添加jvm启动参数:
--add-opens java.base/java.math=ALL-UNNAMED
而我用javafx开发程序的时候项目中有一个module-info.java 的文件,需要将要外部自己写的java依赖添加到这个里面才可以正常被jvm使用

我对jvm底层了解不是很深,所以这块具体jvm底层原理还不清楚,但是知道的是我mybatis在查询数据之后返回对象无法封装到SysDict这个对象然后报错。于是我在module-info.java中添加了这个模块,之后就成功返回数据。

浙公网安备 33010602011771号