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
相关产品推荐
相关产品推荐

