Spring Boot启动报Could not find class ConditionalOnJava$JavaVersion错误如何解决
问题根因
报错的核心原因是Spring Boot跨大版本依赖冲突:
- 项目主Spring Boot版本为2.5.1,属于2.x迭代分支
- 依赖中强制引入了两次
org.springframework.boot:spring-boot-actuator:1.5.14.RELEASE,属于1.x分支版本。两个大版本的Spring Boot底层类结构差异极大,1.x版本的actuator依赖的旧版ConditionalOnJava$JavaVersion类在2.5.1的autoconfigure包中已经调整了结构,所以启动时会抛出类找不到的异常。
修复方案
第一步:解决版本冲突
删除build.gradle中两处重复的低版本actuator依赖:
// 删除health check模块下的这行 implementation 'org.springframework.boot:spring-boot-actuator:1.5.14.RELEASE' // 同时删除datadog模块下的同一行重复依赖 implementation 'org.springframework.boot:spring-boot-actuator:1.5.14.RELEASE'
替换为和主版本匹配的2.x actuator启动器,无需指定版本,依赖管理插件会自动匹配对应2.5.1的兼容版本:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
第二步:适配指标逻辑
你主类中使用的@ExportMetricReader、@ExportMetricWriter是Spring Boot 1.x版本的特有注解,2.x版本已经废弃了这套指标导出API,可根据你的需求二选一调整:
- 方案1:保留现有代码逻辑,将整个项目的Spring Boot主版本回退到1.5.x分支,把插件配置中的Spring Boot版本改为
1.5.14.RELEASE,所有starter依赖统一使用1.5.x版本即可兼容原有注解。 - 方案2:保留2.5.1版本,将旧的自定义指标读写逻辑替换为Spring Boot 2.x默认集成的Micrometer指标API,直接使用
MeterRegistry即可实现指标上报,无需自定义DemoMetricReaderWriter实现类。
第三步:重新构建
刷新Gradle依赖后重新打包运行,即可解决类缺失报错。
内容的提问来源于stack exchange,提问作者aaaaaajib
相关产品推荐
相关产品推荐

