Struts 6.3.0.2项目Maven构建后部署Tomcat10启动失败求助
解决方案建议
核心问题根源
Tomcat10及以上版本采用Jakarta EE API(命名空间从javax.servlet改为jakarta.servlet),而你当前使用的Struts2 6.3.0.2仍依赖旧的javax.servlet类库,导致部署时出现java.lang.NoClassDefFoundError。
具体解决步骤
1. 升级Struts2到适配Jakarta EE的版本
Struts2从6.4.0版本开始全面支持Jakarta EE(对应Tomcat10+),直接在pom.xml中更新依赖版本:
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>6.4.0</version> </dependency>
注意:所有关联的Struts2插件(如struts2-convention-plugin等)需同步升级到对应6.4.x+版本。
2. 修正Maven依赖并清理缓存
执行以下命令清理本地旧依赖,重新构建项目,避免版本冲突:
mvn clean install -U
确保打包后的WEB-INF/lib目录下,只包含Struts2 6.4.x+的依赖,无旧版javax.servlet相关jar包混入。
3. 确认web.xml过滤器配置
适配Jakarta EE的Struts2版本,过滤器类路径无需修改,保持原有配置即可:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
4. Eclipse部署配置检查
- 右键项目 → Properties → Targeted Runtimes,勾选Tomcat10+,确保项目使用Tomcat10的Jakarta API;
- 关闭手动添加Struts2库的配置,依赖由Maven自动同步到部署装配中,避免版本冲突。
5. Tomcat10部署验证
- 打包后的war包,需确认
WEB-INF/lib下包含所有Struts2 6.4.x+依赖,以及Maven自动引入的jakarta.servlet-api相关jar; - 不要手动向Tomcat的
lib目录添加javax.servletjar包,避免与Tomcat自带的Jakarta API冲突。
内容的提问来源于stack exchange,提问作者azshz86
相关产品推荐
相关产品推荐

