升级Spring Boot至2.2.7后遇NoClassDefFoundError问题求助
问题根源
org.springframework.data.repository.query.spi.EvaluationContextExtensionSupport类在Spring Data Hopper版本后被移除,替换为EvaluationContextExtension接口。你遇到的错误是因为某个传递依赖仍在引用旧版Spring Data模块,导致找不到已废弃移除的类。
具体解决步骤
排查传递依赖冲突
执行Maven命令过滤Spring Data相关依赖,定位版本不一致的模块:mvn dependency:tree -Dverbose -Dincludes=org.springframework.data查看输出结果,找出所有版本低于Hopper-SR12的Spring Data模块,记录它们的引入来源。
统一锁定Spring Data版本
Spring Boot 2.2.7对应的Spring Data版本为Hopper-SR12,在pom.xml的<dependencyManagement>中导入Spring Data BOM,强制所有Spring Data模块使用统一版本:<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-bom</artifactId> <version>Hopper-SR12</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement>排除冲突的传递依赖
如果排查到第三方依赖强制引入了旧版Spring Data模块,在该依赖中排除冲突的模块。例如:<dependency> <groupId>第三方依赖groupId</groupId> <artifactId>第三方依赖artifactId</artifactId> <exclusions> <exclusion> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> </exclusion> </exclusions> </dependency>清理本地依赖缓存
执行命令强制更新依赖并重新构建:mvn clean install -U检查自定义扩展类
虽然你未直接使用该类,但排查项目中是否存在继承EvaluationContextExtensionSupport的自定义类。如果有,将其改为实现org.springframework.data.repository.query.spi.EvaluationContextExtension接口。
内容的提问来源于stack exchange,提问作者Kaushik Mahadevan

