Spring Boot2.4升级2.7部署jar报NoClassDefFoundError异常
问题根因
报错核心是运行时类路径下找不到org.springframework.boot.configurationprocessor.json.JSONObject,具体触发原因如下:
- 业务代码存在错误导包:
org.springframework.boot.configurationprocessor.json.JSONObject是spring-boot-configuration-processor内部重打包的实现类,不属于Spring Boot公开可调用的API,业务代码直接引用本身就是错误用法,这类问题大多是IDE自动导包时误选了非公开类导致的。 spring-boot-configuration-processor依赖配置错误:- 你硬编码指定了
2.0.3.RELEASE的旧版本,和项目当前使用的Spring Boot 2.7.0版本严重不匹配 - 该依赖是编译期专用的注解处理器,仅在编译阶段生成配置元数据、供IDE做配置提示使用,完全不需要参与运行时类加载。你没有将其标记为可选,导致该依赖被异常打入运行时fat jar,版本不匹配进一步触发类缺失问题。
- 你硬编码指定了
- 你手动添加的
org.json:json依赖无法解决该问题,因为报错要加载的类并不在org.json包路径下。
IDE中运行无异常,是因为IDE默认会将编译期注解处理器加入运行类路径,可以临时加载到对应类;但打包为可执行jar部署到服务器时,错误的依赖配置会导致对应类无法被正常加载。
解决步骤
- 修正pom.xml中
spring-boot-configuration-processor的依赖配置,删除硬编码的版本号(版本统一交由Spring Boot父pom仲裁),添加<optional>true</optional>标记,避免该依赖被打入运行时产物,正确配置如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
- 全局检索项目所有Java文件,把所有导入
org.springframework.boot.configurationprocessor.json.JSONObject的语句全部替换为正确的JSON类引用:你已经引入了org.json:json依赖,直接替换为导包org.json.JSONObject即可;如果项目统一使用Jackson等其他JSON库,替换为对应库的JSON实现类。 - 在项目根目录执行
mvn clean package命令,先清理旧的构建产物再重新全量打包,部署新生成的jar包即可解决问题。
内容的提问来源于stack exchange,提问作者paukyducky
相关产品推荐
相关产品推荐

