SpringBoot启动EntityManagerFactoryDependsOnPostProcessor类不存在报错解决
Spring Boot启动类缺失报错修复方案
问题根因
报错本质是Spring Boot多版本混装导致的类路径冲突:
- 配置声明的Spring Boot版本为2.3.10.RELEASE,但实际运行时类路径加载了Spring Boot 2.7.0、Spring 5.3.20版本的核心组件,不同版本的自动配置模块类结构、包路径不匹配,直接触发类找不到异常。
- 具体触发逻辑:2.7.0版本的
DevToolsDataSourceAutoConfiguration依赖同版本Spring Data JPA模块下的EntityManagerFactoryDependsOnPostProcessor类,但类路径中实际存在的Spring Data JPA自动配置模块属于2.3.10版本,该类在2.3.x版本中的位置、加载逻辑和2.7.x版本不兼容,因此抛出java.io.FileNotFoundException,最终导致应用上下文初始化失败。 - 版本混装通常是两个原因导致:一是没有正确使用Gradle官方的Spring Boot插件统一管控所有Spring生态依赖版本,二是手动引入的第三方starter、组件传递依赖了高版本Spring Boot组件,覆盖了声明的2.3.10版本。
修复操作步骤
- 第一步:在build.gradle中正确配置Spring Boot官方插件与配套依赖管理插件,所有Spring生态依赖(包括devtools、web、jpa等starter)不要手动指定版本,全部由插件统一对齐版本,避免手动写版本号导致的不一致:
plugins { id 'org.springframework.boot' version '2.3.10.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } // 依赖声明示例,不需要写版本号 dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' developmentOnly 'org.springframework.boot:spring-boot-devtools' // 其他业务依赖 }
- 第二步:排查传递依赖冲突,执行Gradle命令定位引入高版本Spring Boot的第三方依赖:
./gradlew dependencies | grep -i "spring-boot"
找到引入2.7.0版本Spring Boot组件的第三方依赖后,要么将该依赖降级到适配Spring Boot 2.3.x的版本,要么在依赖声明中排除冲突的高版本Spring传递依赖:
implementation('对应第三方依赖的坐标') { exclude group: 'org.springframework.boot' }
- 第三步:清理构建缓存后重新编译启动:
./gradlew clean bootRun
启动后检查日志中打印的Spring Boot、Spring版本,确认和声明的2.3.10.RELEASE完全一致,类找不到异常即可解决。
内容的提问来源于stack exchange,提问作者sfgroups
相关产品推荐
相关产品推荐

