在WildFly 26.1.2中部署Spring 5应用时出现启动错误
WildFly 26.1.2部署Spring 5应用报错解决方案
问题根源
核心冲突是Servlet API包名不兼容:
- WildFly 26.1.2基于Jakarta EE 9规范,使用的是
jakarta.servlet.Servlet接口 - Spring 5依赖的是传统Java EE体系下的
javax.servlet.Servlet接口,两者包名完全不同,导致Spring的DispatcherServlet无法被WildFly识别为合法的Servlet实现类,触发UT010009错误。
解决方案
方案1:降级WildFly版本(推荐,适配现有技术栈)
选择WildFly 20.x及以下版本(如WildFly 20.0.1.Final),这类版本基于Java EE 8规范,使用javax.servlet包体系,和Spring 5、JDK 1.8完全兼容,无需修改应用代码即可正常部署。
方案2:升级Spring+JDK版本(适合长期技术迭代)
- 将Spring框架升级至6.x版本,Spring 6开始全面支持Jakarta EE 9+规范,适配
jakarta.servlet接口 - 同步将JDK版本升级至17及以上(Spring 6最低要求JDK 17),此方案需要调整项目依赖和运行环境,但能适配新版本WildFly的生态。
方案3:排除WildFly自带Servlet API(不推荐,风险高)
在应用的WEB-INF/jboss-deployment-structure.xml中配置排除WildFly自带的Jakarta Servlet API,同时在项目中打包javax.servlet相关依赖。但这种方式极易引发类加载冲突,仅建议用于临时测试,不适合生产环境。示例配置:
<jboss-deployment-structure> <deployment> <exclusions> <module name="jakarta.servlet.api" /> </exclusions> </deployment> </jboss-deployment-structure>
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

