使用Spring JDBC Template编写DAO时触发java.lang.NoClassDefFoundError异常求助
解决Spring JDBC Template抛出的
java.lang.NoClassDefFoundError: org/springframework/core/JdkVersion异常 这个问题我之前帮好几个开发者排查过,核心原因就是Spring依赖版本不兼容导致的——org.springframework.core.JdkVersion这个类在Spring 3.2版本之后就被移除了,如果你的项目里同时存在新旧版本的Spring核心包和JDBC包,就会触发这个找不到类的异常。
下面是具体的解决步骤:
统一所有Spring依赖的版本
确保项目中所有Spring相关的依赖(比如spring-core、spring-jdbc、spring-context等)使用完全相同的版本号。比如用Maven的话,你可以在<properties>里统一声明版本,再在依赖中引用:<properties> <spring.version>5.3.20</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies>排除冲突的间接依赖
如果你的项目引入了第三方库,它可能间接依赖了旧版本的Spring包。这时候需要手动排除这些冲突的依赖。比如某个第三方库依赖了旧版spring-core,你可以在Maven依赖中添加排除规则:<dependency> <groupId>第三方库groupId</groupId> <artifactId>第三方库artifactId</artifactId> <version>第三方库版本</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency>清理本地依赖缓存
有时候本地Maven/Gradle仓库里的依赖文件可能损坏,导致版本识别错误。你可以清理缓存后重新下载依赖:- Maven:执行
mvn clean install -U命令 - Gradle:执行
gradle clean build --refresh-dependencies命令
- Maven:执行
简单总结一下:这个异常本质是新旧Spring API的兼容性问题,只要保证所有Spring组件版本一致,就能解决90%以上的这类问题。
内容的提问来源于stack exchange,提问作者Prashant Pandey
相关产品推荐
相关产品推荐

