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

JBoss EAP 7.4为何优先用内置JAXB API而非应用WEB-INF/lib中的JAR?

JBoss EAP类加载与JAR包选择规则

核心类加载逻辑

JBoss EAP采用模块式类加载机制(基于JBoss Modules框架),核心优先级规则如下:

  • 内置模块优先于应用本地库:容器将Java EE规范相关的API(如JAXB、JPA、Servlet等)打包为内置模块,存放在modules/system/layers/base/目录下。默认情况下,应用会自动依赖这些内置规范模块,类加载器会优先从内置模块加载类,而非应用WEB-INF/lib或WEB-INF/classes中的文件。
  • 模块依赖驱动加载:每个内置模块通过module.xml声明依赖关系,类加载器会按依赖链顺序加载类,确保符合Java EE规范的一致性要求。

针对你的JAXB案例的解释

你项目中WEB-INF/lib下的jakarta.xml.bind-api-2.3.3.jar未被加载,反而使用了JBoss内置的jboss-jaxb-api_2.3_spec-2.0.1.Final-redhat-00001.jar,原因是:
JBoss EAP的javax.xml.bind.api内置模块是Java EE JAXB 2.3规范的官方绑定实现,容器默认认为应用应使用容器提供的规范API,避免版本冲突,因此类加载器优先选择了内置模块中的JAXBContext类。

强制使用应用本地JAR的解决方法

如果需要让应用加载自身WEB-INF/lib中的JAXB API包,可以在应用的WEB-INF/jboss-deployment-structure.xml中排除内置的JAXB模块:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <!-- 排除JBoss内置的JAXB API模块 -->
            <module name="javax.xml.bind.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:40