如何修复java.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException错误?
Spring Boot服务通过Jar2exe转为Windows服务时出现ClassNotFoundException问题解决
错误核心分析
从提供的异常栈可以追踪到根源:
java.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException
这个类来自spring-boot-configuration-processor依赖,但当前你的build.gradle中该依赖的scope是annotationProcessor——这个scope的依赖仅用于编译阶段生成配置元数据,不会被打包到最终的可执行jar中。而IntelliJ IDEA运行项目时,会自动将annotationProcessor scope的依赖加入类路径,所以无论开发机还是生产机用IDE运行都正常,但通过Jar2exe生成exe后,运行时类路径缺失该依赖,导致报错。
解决方案
方案1:调整依赖Scope
将spring-boot-configuration-processor的依赖scope改为implementation,确保它被包含到最终的可执行jar中:
修改build.gradle中的对应依赖行:
// 原配置 annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' // 修改为 implementation 'org.springframework.boot:spring-boot-configuration-processor'
修改后重新构建项目,生成新的jar后再用Jar2exe转为Windows服务。
方案2:替换内部JSON类依赖(推荐)
org.springframework.boot.configurationprocessor.json包属于Spring Boot配置处理器的内部实现,并非对外公开的API,不建议在业务代码中直接引用。如果你的代码里直接使用了这个包下的类(比如JSONException、JSONObject),建议替换为标准JSON库:
- 使用Spring Boot默认集成的Jackson:替换为
com.fasterxml.jackson.core.JsonProcessingException等类 - 或者使用Gson、Fastjson等第三方库
替换后可以保持spring-boot-configuration-processor的annotationProcessor scope,同时避免运行时依赖问题。
验证步骤
- 执行
./gradlew clean build清理并重新构建项目 - 先测试生成的jar是否能正常运行:
java -jar [你的jar文件名].jar - 确认jar运行正常后,再用Jar2exe工具将其转为Windows服务,测试服务启动情况
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

