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

WildFly部署EAR应用类加载异常求助:Filter及Spring类缺失

问题分析与解决办法

一、WildFly Preview 22.0.1.Final:javax.servlet.Filter 链接失败问题

问题根源

WildFly 22是Jakarta EE 9过渡版本,默认类加载路径优先提供jakarta.servlet.*类,而你使用的Spring版本依赖旧的javax.servlet.*命名空间,导致类加载冲突。即使配置jboss-deployment-structure.xml,若模块名称或slot指定错误,仍无法解决问题。

解决办法

  1. 修正jboss-deployment-structure.xml配置:
    明确导入javax命名空间的servlet模块,指定slot为javax(WildFly 22保留了javax兼容模块):
    <jboss-deployment-structure>
        <deployment>
            <dependencies>
                <module name="javax.servlet.api" slot="javax" export="true"/>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    
  2. 切换兼容Jakarta EE 9的Spring版本:
    若项目允许,升级到Spring 5.3.x的Jakarta兼容分支(artifactId带-jakarta后缀),或直接升级到Spring 6+(原生支持Jakarta EE 9+),从根源避免命名空间冲突。

二、WildFly 29.0.0.Final:WAR无法找到spring-context.jar中的类问题

问题根源

WildFly的EAR类加载机制仅自动识别EAR根目录下lib文件夹直接存放的JAR文件,你将spring-context.jar放在lib/spring子目录中,这些JAR不会被加入EAR的全局类加载路径,导致WAR子部署无法访问。

解决办法

  1. 调整JAR存放路径:
    将lib/spring目录下的所有Spring相关JAR直接移动到EAR/lib目录下,WildFly会自动将这些JAR纳入全局类加载器,所有子部署(WAR/EJB)均可访问。
  2. 通过jboss-deployment-structure.xml手动指定依赖:
    若不想调整目录结构,可在WAR的WEB-INF/jboss-deployment-structure.xml中显式导入EAR lib子目录中的JAR:
    <jboss-deployment-structure>
        <sub-deployment name="your-war-name.war">
            <dependencies>
                <module name="deployment.yourearname.ear.lib.spring.spring-context" export="true"/>
                <!-- 按需添加其他spring模块 -->
            </dependencies>
        </sub-deployment>
    </jboss-deployment-structure>
    
    命名规则说明:deployment.[EAR名称].[JAR所在路径从lib开始].[JAR文件名(去掉.jar)]。
  3. 检查WAR的MANIFEST.MF配置:
    确保WAR的MANIFEST.MF中没有配置Class-Path或Dependencies限制类加载,若有冲突配置需移除或调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:15:02