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

Java 11环境下从orm.xml生成Hibernate静态元模型失败求助

解决Java 11下Hibernate静态元模型生成的JAXB相关问题

问题核心

Java 11移除了JDK自带的JAXB模块,导致Hibernate JPAModelGen解析orm.xml时找不到JAXB实现;后续引入JAXB后出现的ClassCastException,是因为JAXB类被不同类加载器重复加载,导致类型不匹配。


解决方案

1. 正确配置注解处理器依赖

将JAXB相关依赖仅添加到Maven编译插件的annotationProcessorPaths中,确保注解处理器使用独立的类加载器加载这些依赖,避免与项目主类路径冲突:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>11</source>
                <target>11</target>
                <annotationProcessorPaths>
                    <!-- Hibernate静态元模型生成器 -->
                    <path>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-jpamodelgen</artifactId>
                        <version>适配你的Hibernate版本</version>
                    </path>
                    <!-- JAXB API -->
                    <path>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.3.1</version>
                    </path>
                    <!-- JAXB 核心实现 -->
                    <path>
                        <groupId>org.glassfish.jaxb</groupId>
                        <artifactId>jaxb-core</artifactId>
                        <version>2.3.0.1</version>
                    </path>
                    <!-- JAXB运行时 -->
                    <path>
                        <groupId>org.glassfish.jaxb</groupId>
                        <artifactId>jaxb-runtime</artifactId>
                        <version>2.3.1</version>
                    </path>
                    <!-- JAXB激活依赖 -->
                    <path>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>1.2.0</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 清理冲突依赖

  • 移除项目主<dependencies>块中所有JAXB相关依赖,防止主类加载器和注解处理器类加载器重复加载同一类
  • 执行mvn dependency:tree检查依赖树,排除任何意外引入的JAXB重复依赖

3. 验证构建

  1. 执行mvn clean清空旧构建产物
  2. 运行mvn compile,检查target/generated-sources/annotations目录是否生成了预期的静态元模型类

4. 模块化项目额外配置

如果项目使用Java模块(存在module-info.java),需在模块声明中添加:

module 你的模块名 {
    requires javax.xml.bind;
    requires org.glassfish.jaxb.runtime;
    // 其他必要模块声明
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:42:50