使用AnnotationConfigApplicationContext时出现NoClassDefFoundError问题求助
Spring AnnotationConfigApplicationContext 抛出 NoClassDefFoundError 问题解决
问题现象
使用AnnotationConfigApplicationContext启动Spring应用时出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/NestedIOException at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:323) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at demo.SpringDemoApplication.main(SpringDemoApplication.java:12) Caused by: java.lang.ClassNotFoundException: org.springframework.core.NestedIOException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 8 more Process finished with exit code 1
XML配置方式可正常运行,但注解配置失效,怀疑是依赖或配置问题。
解决方案
1. 确保完整引入Spring上下文依赖
AnnotationConfigApplicationContext属于spring-context模块,该模块会自动传递依赖spring-core、spring-beans等核心组件。检查你的pom.xml是否包含完整的spring-context依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>你的Spring版本号</version> </dependency>
避免单独只引入spring-core或spring-beans,缺失上下文模块会导致注解配置所需的类无法加载。
2. 统一Spring所有依赖版本
如果pom.xml中引入了多个Spring模块,必须确保所有模块的版本完全一致,版本冲突是引发类找不到的常见原因。可以通过dependencyManagement统一管理版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>你的Spring版本号</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
后续引入Spring模块时可省略版本号,自动使用BOM中定义的统一版本。
3. 清理本地依赖缓存
本地Maven/Gradle缓存的依赖包可能损坏,执行以下命令清理并重新下载依赖:
- Maven:
mvn clean install -U(-U参数强制更新快照依赖) - Gradle:
./gradlew clean build --refresh-dependencies
4. 检查JDK版本兼容性
确保Spring版本与JDK版本匹配:
- Spring 5.x 支持JDK 8及以上
- Spring 6.x 支持JDK 17及以上
版本不兼容会导致依赖加载异常,进而引发类找不到错误。
内容的提问来源于stack exchange,提问作者Prasanna
相关产品推荐
相关产品推荐

