如何解决无法访问com.sun.rowset.CachedRowSetImpl类的问题?
解决Spring JDBC访问com.sun.rowset.CachedRowSetImpl的模块权限错误
这个错误是Java 9+模块系统的限制导致的:org.springframework.jdbc.core.SqlRowSetResultSetExtractor 处于未命名模块(你的项目依赖大概率还是基于传统classpath而非JPMS的modulepath),而com.sun.rowset.CachedRowSetImpl 所属的java.sql.rowset模块默认没有将com.sun.rowset包导出给未命名模块,因此触发了访问权限拦截。
下面是几种可行的解决方法:
升级Spring Framework版本
较新的Spring版本(比如5.3.x及以上)已经修复了这个JPMS兼容问题,直接把项目中的Spring相关依赖升级到对应版本,就能彻底解决这个问题,这也是最推荐的方案。添加JVM启动参数
如果暂时无法升级Spring,可以在启动项目时添加JVM参数,强制开放模块访问权限:--add-exports java.sql.rowset/com.sun.rowset=ALL-UNNAMED比如在IDEA的运行配置里,把这个参数加到
VM options中;如果用Maven运行,可在exec-maven-plugin的配置里指定启动参数。适配JPMS模块配置(仅模块化项目适用)
要是你的项目已经迁移到Java模块系统(有module-info.java),可以在该文件中添加以下配置:requires java.sql.rowset; // 替换成你的项目中使用Spring JDBC的包路径 opens com.yourproject.dao to org.springframework.jdbc;
内容的提问来源于stack exchange,提问作者Angelo Orale
相关产品推荐
相关产品推荐

