Spring Boot 2.7.4升级至3.0.0后出现javax.servlet.Filter缺失错误求助
Spring Boot 2.7.4升级到3.0.0启动时出现NoClassDefFoundError: javax.servlet.Filter的解决方法
问题原因
Spring Boot 3.0及以上版本基于Spring Framework 6,全面迁移到了**Jakarta EE 9+**规范,原来Java EE体系下的javax.*命名空间API全部替换为jakarta.*。启动时出现javax.servlet.Filter找不到的错误,是因为项目里还有依赖在使用旧的Java EE API,或者核心依赖(比如Spring Security)没升级到适配Spring Boot 3的版本。
解决步骤
升级核心依赖版本
如果用Spring Boot Starter Parent,确保parent版本是3.0.0,它会自动管理所有适配的依赖版本:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <relativePath/> </parent>若手动引入Spring Security,必须用6.0+版本:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>6.0.0</version> </dependency>替换Java EE依赖为Jakarta EE版本
所有原javax.*开头的依赖都要换成jakarta.*,比如Servlet API:<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>其他如JPA、JMS等依赖也要做同样替换。
修正代码中的导入语句
全局替换代码里的import javax.servlet.*为import jakarta.servlet.*,涉及Filter、ServletRequest、ServletResponse等相关类的导入都要改。清理重构项目
- Maven项目执行:
mvn clean install - Gradle项目执行:
./gradlew clean build
必要时可以删除本地Maven/Gradle仓库中残留的旧版javax相关依赖,避免依赖冲突。
- Maven项目执行:
Gradle项目示例
如果是Gradle构建,配置示例如下:
plugins { id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.1.0' id 'java' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-security' }
内容的提问来源于stack exchange,提问作者Sudan Shrestha
相关产品推荐
相关产品推荐

