You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.servlet jar包,避免与Tomcat自带的Jakarta API冲突。

内容的提问来源于stack exchange,提问作者azshz86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:07:45