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

WAS9现有项目迁移至JBoss EAP 7.3时出现Spring相关LinkageError报错

JBoss EAP 7.3 Spring类加载冲突解决方案

该java.lang.LinkageError属于典型的类加载约束冲突,核心原因是JBoss EAP 7.3默认内置了Spring框架模块,和你项目WEB-INF/lib下放置的Spring 4.3.24版本包被不同的ModuleClassLoader加载,导致签名里的org.springframework.context.ApplicationContext存在两个不同的类对象,触发约束校验失败。

排查解决步骤如下:

  • 步骤1:确认JBoss内置Spring模块
    进入JBoss安装目录下的modules/system/layers/base/org/springframework路径,确认存在spring-context、spring-core等内置Spring模块,记录模块版本,确认和你项目使用的4.3.24不一致。
  • 步骤2:配置项目类加载优先级,排除JBoss内置Spring模块
    在项目的WEB-INF目录下创建jboss-deployment-structure.xml配置文件,强制排除JBoss自带的Spring模块,优先加载项目内部的Spring包,配置示例如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
        <deployment>
            <!-- 排除JBoss内置的所有Spring相关模块,根据你项目实际用到的Spring组件补充排除项 -->
            <exclusions>
                <module name="org.springframework.spring-beans"/>
                <module name="org.springframework.spring-context"/>
                <module name="org.springframework.spring-core"/>
                <module name="org.springframework.spring-expression"/>
                <module name="org.springframework.spring-aop"/>
                <module name="org.springframework.spring-web"/>
                <module name="org.springframework.spring-jdbc"/>
            </exclusions>
            <!-- 配置优先加载项目WEB-INF下的类资源,优先于服务器模块 -->
            <local-last value="false"/>
        </deployment>
    </jboss-deployment-structure>
    

    如果你部署的是EAR包,需要将该配置文件放在EAR的META-INF目录下,同时所有子WAR模块的Spring依赖统一管理,避免子模块重复引入不同版本的Spring包。

  • 步骤3:排查项目内部Spring包冲突
    如果你使用Maven/Gradle管理依赖,执行依赖树命令排查是否存在多个版本的Spring包传递引入:
    • Maven项目执行命令:mvn dependency:tree | grep spring
    • 排除所有非4.3.24版本的Spring传递依赖,确保WEB-INF/lib下所有Spring子模块的版本完全一致。
  • 步骤4:验证类加载来源
    可以在项目初始化逻辑中加入调试代码,确认ApplicationContext类的加载来源:
    Class<?> appCtxClazz = Class.forName("org.springframework.context.ApplicationContext");
    // 打印类加载器
    System.out.println("ApplicationContext ClassLoader: " + appCtxClazz.getClassLoader());
    // 打印类所在的jar包路径
    System.out.println("ApplicationContext Jar Path: " + appCtxClazz.getProtectionDomain().getCodeSource().getLocation());
    
    确认输出的jar包路径为你项目WEB-INF/lib下的Spring 4.3.24版本jar包,若输出为JBoss的modules目录路径,说明步骤2的模块排除配置未生效,需要检查配置文件的位置、格式是否正确,以及是否有遗漏的Spring模块未排除。
  • 额外校验:检查全局模块配置
    查看JBoss的standalone/configuration/standalone.xml(域模式下为domain/configuration/domain.xml)中的global-modules配置,确认没有全局引入Spring相关模块,若有则删除对应配置后重启JBoss。

内容的提问来源于stack exchange,提问作者Santanu Prasad US

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03