升级Spring Boot 3.2.2遇ClassNotFoundException问题求助
解决方案
核心问题分析
Spring Boot 3.x 基于 Jakarta EE 9+,所有原 javax.* 包已迁移至 jakarta.* 命名空间。你的项目中存在依赖版本不兼容和JSTL标签库引用未更新的问题,导致类找不到错误。
1. 修正POM依赖
(1)替换Spring Session依赖
原 spring-session-data-redis:1.3.1.RELEASE 是基于javax的旧版本,完全不兼容Spring Boot 3.x,替换为适配版本:
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <!-- 无需手动指定版本,Spring Boot Parent会自动管理匹配3.2.2的版本 --> </dependency>
(2)移除冲突的Servlet API依赖
手动引入的 jakarta.servlet-api:5.0.0 与Spring Boot 3.2.2内置的Jakarta Servlet 6.0冲突,直接删除该依赖:
<!-- 删除这段 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency>
(3)替换JSTL实现为Jakarta版本
原 taglibs-standard-impl:1.2.1 是javax版本的JSTL实现,替换为适配Jakarta的实现:
<!-- 删除旧的taglibs依赖 --> <!-- <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.1</version> </dependency> --> <!-- 添加Jakarta版本的JSTL实现 --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> </dependency>
2. 更新JSP中的Taglib引用
index.jsp 中使用的旧JSTL URI是基于javax的,替换为Jakarta版本的URI:
<!-- 替换前 --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 替换后 --> <%@ taglib prefix="c" uri="http://jakarta.apache.org/taglibs/standard/core" %>
3. 清理与重新构建
- 执行Maven命令清理并构建项目:
mvn clean install - 在Eclipse中右键项目 → Maven → Update Project,勾选"Force Update of Snapshots/Releases"。
- 清理Tomcat的工作目录(若使用内置Tomcat,重启项目即可;若用外部Tomcat,删除
work目录后重新部署)。
额外注意
部分老旧依赖(如unirest-java:1.4.9、itextpdf:5.4.2)可能仍依赖javax.*包,后续建议逐步升级到支持Jakarta的版本,避免潜在冲突。
内容的提问来源于stack exchange,提问作者lauwis
相关产品推荐
相关产品推荐

