You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Spring Boot应用时如何修复ClassNotFoundException: JSONException错误

在Railway.app部署Spring Boot应用时启动失败

本地IDE中Spring Boot 3.0.2(Java 17)应用运行正常,但部署到Railway.app时启动报错,核心错误为ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException,完整错误日志如下:

2023-03-17T09:12:45.991Z  INFO 1 --- [           main] c.a.b.b.BloggingApisApplication          : Starting BloggingApisApplication v0.0.1-SNAPSHOT using Java 17.0.5 with PID 1 (/app/target/blogging-apis-0.0.1-SNAPSHOT.jar started by root in /app)
2023-03-17T09:12:45.996Z  INFO 1 --- [           main] c.a.b.b.BloggingApisApplication          : No active profile set, falling back to 1 default profile: "default"
2023-03-17T09:12:48.212Z ERROR 1 --- [           main] o.s.boot.SpringApplication               : Application run failed
java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer
at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) ~[spring-boot-autoconfigure-3.0.2.jar!/:3.0.2]
at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:183) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:144) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:410) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:283) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[spring-context-6.0.4.jar!/:6.0.4]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:95) ~[blogging-apis-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[blogging-apis-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65) ~[blogging-apis-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.aryan.blogging.bloggingapis.config.SecurityConfig] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@5c29bfd]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.0.4.jar!/:6.0.4]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:360) ~[spring-core-6.0.4.jar!/:6.0.4]
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:417) ~[spring-core-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$getTypeForFactoryMethod$1(AbstractAutowireCapableBeanFactory.java:749) ~[spring-beans-6.0.4.jar!/:6.0.4]
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1740) ~[na:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:748) ~[spring-beans-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:681) ~[spring-beans-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:652) ~[spring-beans-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1632) ~[spring-beans-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:559) ~[spring-beans-6.0.4.jar!/:6.0.4]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:531) ~[spring-beans-6.0.4.jar!/:6.0.4]

... 25 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/configurationprocessor/json/JSONException
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.0.4.jar!/:6.0.4]
... 41 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587) ~[na:na]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:149) ~[blogging-apis-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
... 45 common frames omitted

问题原因

错误根源是业务代码(具体是SecurityConfig类)引用了org.springframework.boot.configurationprocessor.json包下的JSONException,而这个包属于Spring Boot配置处理器的内部依赖,默认不会被打包到可执行JAR中。本地IDE运行正常是因为IDE会自动包含该依赖用于配置元数据生成,但打包时该依赖被排除。

解决方案

方案1:替换为标准JSON库(推荐)

将代码中对org.springframework.boot.configurationprocessor.json.JSONException的引用替换为标准JSON处理库的异常类,比如:

  • Jackson的com.fasterxml.jackson.core.JsonProcessingException
  • Jakarta EE规范的jakarta.json.JsonException
  • Gson的com.google.gson.JsonSyntaxException

方案2:确保依赖被打包(仅临时应急)

如果必须保留原引用,修改构建配置将spring-boot-configuration-processor依赖包含到可执行JAR中:

  • Maven:修改pom.xml中该依赖的范围,移除<optional>true</optional>:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
  • Gradle:修改build.gradle将依赖从annotationProcessor改为implementation:
implementation 'org.springframework.boot:spring-boot-configuration-processor'

内容的提问来源于stack exchange,提问作者Aryan Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:57:05