升级Java17+Spring Boot3后JSP依赖配置异常求助
解决Spring Boot 3 + Java 17 + JSP项目的Dynamic Web Module依赖错误
问题原因
错误提示里的「Dynamic Web Module facet version (2.5)」是核心矛盾:Web Module 2.5对应Java EE 5规范,IDE会默认查找javax.servlet.*依赖,但Spring Boot 3基于Jakarta EE 9+,所有Servlet相关API已迁移到jakarta.servlet.*包,两者规范不匹配导致报错。
解决方案
1. 更新Dynamic Web Module Facet版本
- 右键项目 → Properties → Project Facets
- 先取消勾选「Dynamic Web Module」,点击Apply
- 重新勾选「Dynamic Web Module」,选择版本4.0或更高(推荐5.0,对应Jakarta Servlet 5.0)
- 点击「Further configuration available...」,确认上下文根等配置,确保关联Jakarta EE相关库而非Java EE
2. 清理并同步Maven依赖
- 右键项目 → Maven → Update Project,勾选「Force Update of Snapshots/Releases」后执行
- 执行命令行清理缓存:
mvn clean install
3. 修正Pom.xml依赖配置
确保依赖完全基于Jakarta规范,移除所有javax.*相关依赖,推荐配置如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <!-- 替换为最新Spring Boot 3稳定版 --> <relativePath/> </parent> <dependencies> <!-- Spring Web核心依赖,已包含jakarta.servlet-api --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- JSP编译支持 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!-- JSTL标签库 --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> </dependency> </dependencies>
注:无需单独添加
jakarta.servlet-api依赖,spring-boot-starter-web已包含该依赖,且默认scope为provided(容器提供)
4. 检查IDE构建路径
- 右键项目 → Build Path → Configure Build Path
- 在Libraries标签下,移除所有包含
javax.servlet-api的库 - 确保仅保留Jakarta相关依赖(如
jakarta.servlet-api、tomcat-embed-jasper等)
内容的提问来源于stack exchange,提问作者Mingju Roberts
相关产品推荐
相关产品推荐

