Tomcat9+Maven+Spring Web项目报ClassNotFoundException求助
ClassNotFoundException: org.springframework.web.context.ContextLoaderListener的方案 首先先揪出最容易被忽略的致命细节:检查你web.xml里的类名拼写!
你的报错里写的是org.springFramework.web.context.ContextLoaderListener,但正确的全限定类名是org.springframework.web.context.ContextLoaderListener——注意springFramework里的F是小写的f,包名是全小写的springframework!如果这里拼写错误,无论怎么调整依赖都找不到类,这是很多开发者踩过的坑。
如果拼写完全没问题,再按以下步骤逐一排查:
1. 确认Maven依赖配置无问题
打开项目的pom.xml,检查spring-web依赖的配置:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>你的Spring版本号</version> <!-- 注意:不要随便加<scope>provided</scope>,除非你明确Tomcat的lib目录已经自带这个jar --> </dependency>
如果之前加了provided scope,Tomcat启动时不会加载项目WEB-INF/lib下的这个jar,而Tomcat本身默认是不带Spring jar的,自然会找不到类。
2. 强制更新Maven依赖并校验本地仓库
执行下面的Maven命令,强制更新依赖,确保jar包完整下载到本地:
mvn clean install -U
之后去本地Maven仓库路径(默认是~/.m2/repository/org/springframework/spring-web)查看对应版本的文件夹,确认spring-web-x.x.x.jar存在,且解压后能找到org/springframework/web/context/ContextLoaderListener.class文件(避免jar包损坏)。
3. 检查IDE部署配置,确保依赖被打包进WEB-INF/lib
针对IntelliJ IDEA:
- 打开
Run/Debug Configurations,找到你的Tomcat配置,切换到Deployment标签 - 检查你部署的Artifact(比如
xxx:war exploded)是否包含WEB-INF/lib下的spring-web.jar - 如果没有,打开
Project Structure->Artifacts,选中你的项目Artifact,点击右侧+->Library Files,找到spring-web依赖添加进去,再重新部署。
针对Eclipse:
- 右键项目 ->
Properties->Deployment Assembly - 检查列表中是否有
Maven Dependencies这一项,如果没有,点击Add->Java Build Path Entries->Maven Dependencies-> 确定,这样部署时才会把Maven依赖的jar包复制到WEB-INF/lib下。
4. 排查Tomcat lib目录的jar冲突
如果Tomcat安装目录的lib文件夹里存在旧版本或不兼容的Spring相关jar,会导致类加载优先级混乱,覆盖项目自带的jar。解决方法:
- 关闭Tomcat,删除Tomcat
lib目录下所有Spring相关的jar包(比如spring-web.jar、spring-core.jar等) - 重新启动Tomcat,让项目WEB-INF/lib下的jar负责加载Spring类。
5. 清理并重新编译项目
如果项目编译输出目录有异常,也可能导致依赖类无法被加载:
- 执行
mvn clean清理编译输出目录(默认是target) - 再执行
mvn compile重新编译项目,确保编译过程无报错。
如果以上步骤都试过还是不行,可以补充你的Spring版本、Tomcat版本,以及pom.xml的完整依赖配置,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者DisplayName

