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

WildFly 27中升级EAR内置Hibernate至6.6.17失败求助

解决WildFly 27中通过EAR升级Hibernate至6.6.17但版本仍显示6.1.5的问题

1. 补全jboss-deployment-structure.xml的排除规则

WildFly自带的Hibernate关联模块不止核心的org.hibernate,需确保所有相关模块都被排除,且每个需要自定义Hibernate的子模块(WAR/EJB)都配置该文件。正确的WAR级配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="jpa"/>
        </exclude-subsystems>
        <exclusions>
            <module name="org.hibernate" slot="main"/>
            <module name="org.hibernate.jpa.api"/>
            <module name="org.hibernate.validator"/>
            <module name="org.hibernate.commons-annotations"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

2. 排查EAR类加载优先级冲突

WildFly中EAR根目录lib下的Jar加载优先级高于WAR的WEB-INF/lib,如果EAR_ROOT/lib中存在旧版Hibernate Jar,会覆盖WAR中的新版本:

  • 解压EAR包,检查lib目录是否有hibernate-core-6.1.5.Final.jar等旧版文件,如有直接删除
  • 执行mvn dependency:tree排查依赖树,排除其他依赖间接引入的旧版Hibernate,确保pom.xml中仅保留6.6.17版本的依赖

3. 确保Hibernate依赖完整

Hibernate 6.6.17需要配套的依赖集,pom.xml中至少需包含核心及关联模块:

<dependencies>
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.6.17.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>6.6.17.Final</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>8.0.1.Final</version>
    </dependency>
</dependencies>

注意:Hibernate 6.6.x要求Java 11+,需确保WildFly运行环境及项目编译版本符合要求。

4. 全局配置EAR级别的模块隔离

若EAR包含多个子模块,需在EAR根目录添加jboss-deployment-structure.xml,全局隔离子模块类加载并排除旧版依赖:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
    <sub-deployment name="your-war-module.war">
        <exclude-subsystems>
            <subsystem name="jpa"/>
        </exclude-subsystems>
        <exclusions>
            <module name="org.hibernate"/>
            <module name="org.hibernate.jpa.api"/>
            <module name="org.hibernate.validator"/>
        </exclusions>
    </sub-deployment>
    <!-- 其他子模块如EJB需重复上述排除配置 -->
</jboss-deployment-structure>

5. 验证类加载来源

添加调试代码确认org.hibernate.Version的加载路径,判断是否加载了目标版本Jar:

ClassLoader loader = org.hibernate.Version.class.getClassLoader();
URL classPath = loader.getResource("org/hibernate/Version.class");
System.out.println("Hibernate类加载路径:" + classPath);

若输出指向WildFly系统模块目录(如modules/system/layers/base/org/hibernate/main/...),说明排除规则未生效;若指向WAR的WEB-INF/lib/hibernate-core-6.6.17.Final.jar,则需清理缓存。

6. 清理WildFly缓存

WildFly的部署缓存可能保留旧版类文件,需:

  • 停止WildFly服务
  • 删除standalone/data/content、standalone/tmp、standalone/work目录下所有内容
  • 重启WildFly并重新部署EAR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:13:10