JackCess 4.0.1运行报NoClassDefFoundError: java/sql/Blob异常求助
问题原因
- Java 9及以上版本引入了JPMS(Java平台模块化系统),
java.sql.Blob所属的java.sql模块并非所有运行场景都会默认加载:- 若项目使用模块化配置(存在
module-info.java),未显式声明依赖java.sql模块时,类加载器无法找到对应类 - 若项目未使用模块化配置,部分精简JDK发行版、运行时指定了模块限制参数、或自定义jlink运行镜像未包含
java.sql模块时,也会出现该错误
- 若项目使用模块化配置(存在
- Jackcess 4.x版本本身依赖
java.sql模块下的Blob相关类,官方文档提到的「依赖缺失」包含JDK内置模块缺失的场景,并非仅指代第三方依赖缺失。
解决方案
根据你的项目配置选择对应方案即可:
场景1:项目使用模块化配置(存在module-info.java)
在module-info.java中添加java.sql模块的依赖声明:
module your.module.name { // 保留原有依赖声明 requires java.sql; }
场景2:项目未使用模块化配置(走Classpath模式运行)
在程序启动的VM参数中添加--add-modules java.sql强制加载该模块:
- 命令行运行示例:
java --add-modules java.sql -cp <你的类路径> <主类全限定名> - Maven运行/测试配置,以maven-surefire-plugin为例:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>${surefire.version}</version> <configuration> <argLine>--add-modules java.sql</argLine> </configuration> </plugin> - IDE运行时,在对应运行配置的「VM选项」栏添加
--add-modules java.sql即可。
场景3:使用jlink构建自定义运行时镜像
构建镜像时将java.sql模块加入到包含的模块列表中即可。
内容的提问来源于stack exchange,提问作者RainerMtb
相关产品推荐
相关产品推荐

