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

运行SpringBoot测试用例时遭遇NoClassDefFoundError: javax/servlet/ServletException错误

Spring Boot测试上下文加载失败:javax.servlet.ServletException缺失问题解决

问题详情

依赖配置

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.3.RELEASE</version>
    <relativePath/> 
</parent>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <!--<version>2.1.8.RELEASE</version>-->
        <scope>compile</scope>
        <!--<scope>compile</scope>-->
    </dependency>

测试代码片段

@Autowired
AutowireCapableBeanFactory beanFactory;

报错信息

java.lang.NoClassDefFoundError: javax/servlet/ServletException

at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.springframework.boot.SpringApplication.createApplicationContext(SpringApplication.java:587)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:111)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 29 more

问题原因

  1. Scope配置错误:spring-boot-starter-test默认scope为test,其中依赖的servlet-api等组件scope是provided。将test依赖的scope改为compile后,这些provided级别的依赖不会被自动引入classpath,导致测试运行时找不到javax.servlet.ServletException类。
  2. 版本冲突风险:注释掉的2.1.8.RELEASE版本与父依赖1.4.3.RELEASE版本差异过大,极易引发依赖冲突,进一步导致上下文加载失败。

解决方案

方案1:修正test依赖的scope(推荐)

将spring-boot-starter-test的scope改回默认的test,测试依赖无需编译到生产代码中,同时能自动引入所需组件:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

方案2:统一依赖版本

所有Spring Boot相关依赖版本需与父依赖保持一致,无需手动指定test依赖版本(父依赖会自动管理版本),避免版本冲突。

方案3:手动引入servlet-api(仅当必须在编译阶段使用test组件时)

如果确实需要将test依赖的scope设为compile,需手动添加servlet-api依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version> <!-- 与Spring Boot 1.4.x版本兼容 -->
    <scope>compile</scope>
</dependency>

内容的提问来源于stack exchange,提问作者divyanshu gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:01:24