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

Java 21+Hibernate环境下JAXB ClassNotFoundException问题求助

Java 21 + Hibernate JAXB ClassNotFoundException 问题求助

在Java 21应用中使用Hibernate时,始终无法解决JAXB相关的ClassNotFoundException,尝试多种方法仍未修复。

报错信息

Caused by: jakarta.xml.bind.JAXBException: Implementation of Jakarta XML Binding-API has not been found on module path or classpath.
    at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:252) ~[?:?]
    at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:240) ~[?:?]
    at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:381) ~[?:?]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:605) ~[?:?]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:546) ~[?:?]
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:121) ~[?:?]
    ... 25 more
Caused by: java.lang.ClassNotFoundException: org.glassfish.jaxb.runtime.v2.ContextFactory
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445) ~[?:?]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) ~[?:?]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
    at jakarta.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:113) ~[?:?]
    at jakarta.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:146) ~[?:?]
    at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:250) ~[?:?]
    at jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:240) ~[?:?]
    at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:381) ~[?:?]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:605) ~[?:?]
    at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:546) ~[?:?]
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:121) ~[?:?]
    ... 25 more

当前完整POM文件

<groupId>org.test.project</groupId>
<artifactId>project-core</artifactId>
<version>1.0-SNAPSHOT</version>

<name>project-core</name>
<description>test project</description>

<repositories>
    <repository>
        <id>spigot-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
    <repository>
        <id>minecraft-repo</id>
        <url>https://libraries.minecraft.net/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.spigotmc</groupId>
        <artifactId>spigot-api</artifactId>
        <version>1.21.4-R0.1-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
    <!-- Hibernate Core -->
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.6.12.Final</version>
    </dependency>
    <!-- MySQL Connector -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>9.2.0</version>
    </dependency>
</dependencies>

<build>
    <defaultGoal>clean install</defaultGoal>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <!-- Maven Compiler Plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>21</source>
                <target>21</target>
            </configuration>
        </plugin>

        <!-- Maven Shade Plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

</project>

补充说明

当前POM已移除JAXB依赖,但此前已尝试添加JAXB API及运行时实现(如下所示),问题仍未解决。反编译JAR文件后确认org.glassfish.jaxb.runtime.v2.ContextFactory已被正确打包,属于Hibernate依赖的一部分。

之前尝试添加的JAXB依赖

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>4.0.0</version> 
</dependency>
<!-- JAXB Reference Implementation -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>4.0.0</version> 
    <scope>runtime</scope>
</dependency>

已尝试的其他方法:

  • 更换JAXB依赖的多个版本
  • 使用Sun相关JAXB依赖
  • 在MANIFEST.mf中配置类路径
  • 改用Eclipse Moxy依赖并添加jaxb.properties文件
  • 添加JAXB依赖时排除Hibernate中的对应依赖以避免版本冲突
  • 更换多个Java版本(包括非21版本)

所有尝试均无法消除java.lang.ClassNotFoundException: org.glassfish.jaxb.runtime.v2.ContextFactory错误,无法正常启动Hibernate。请问还有什么可行的解决方案?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:15:54