Java 17环境下引入java.sql.Date需添加什么Maven依赖?
解决方案
在pom.xml的依赖节点中添加以下配置即可解决报错:
<dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jdbc_4.2_spec</artifactId> <version>1.0</version> <scope>provided</scope> </dependency>
对应场景说明
匹配的问题上下文:
- 开发环境使用Java 17,生产运行环境为Java 8
- 仅接受直接引入Maven依赖的方案,不做Java 9模块相关配置调整
- 不修改现有开发、生产环境的JDK版本
- 运行时抛出如下错误栈:
java.lang.NoClassDefFoundError: java/sql/Date at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
依赖作用逻辑
- 该依赖内置JDBC 4.2版本(与Java 8内置JDBC版本完全对齐)下
java.sql包所有标准API的类定义,编译阶段会优先加载该jar包中的类生成字节码,避免引用Java 17模块化后的类路径索引,导致运行时在Java 8环境下定位类失败 - 依赖作用域设置为
provided,仅在编译、测试阶段生效,不会被打包进最终交付产物,生产运行时会直接调用Java 8内置的java.sql核心类,不会产生类冲突 - 引入后直接重新构建项目即可生效,不需要额外修改编译插件配置、模块描述文件
内容的提问来源于stack exchange,提问作者yegor256
相关产品推荐
相关产品推荐

