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中添加了这个模块,之后就成功返回数据。
分类:
工作中遇到的问题(实战测试)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了