如何解决Java 15运行时的javax.xml.bind.JAXBException类未找到错误
解决Java 15运行Hibernate时JAXB缺失的问题
问题原因
Java 9及以后版本中,JAXB(Java Architecture for XML Binding)被移出JDK核心模块。仅添加jaxb-api依赖只提供了接口定义,缺少运行时实现类,因此出现NoClassDefFoundError。
有效解决方法
方法一:添加完整JAXB依赖包
在pom.xml中补充以下依赖,覆盖接口、实现及关联依赖:
<!-- JAXB API 接口 --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- JAXB 运行时实现 --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> <!-- JAXB 核心工具类 --> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.1</version> </dependency> <!-- JAXB 依赖的激活框架 --> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
添加后执行mvn clean install更新依赖,重新运行代码即可。
方法二:JVM参数临时引入模块(仅适用于Java 9-11)
若不想修改依赖,可在运行程序时添加JVM参数强制引入模块,但Java 12及以后java.xml.bind模块已被完全移除,因此仅作为临时方案:
--add-modules java.xml.bind
额外说明
如果使用Hibernate 5.4及以上版本,建议迁移到Jakarta EE版本的JAXB依赖(jakarta.xml.bind:jakarta.xml.bind-api),适配Java 11+长期支持版本,避免依赖旧的javax命名空间包。
内容的提问来源于stack exchange,提问作者Gökhan
相关产品推荐
相关产品推荐

