使用hibernate-jpamodelgen 6.1.5.Final遇JAXBException问题求助
解决Hibernate JPA Modelgen编译时JAXBException缺失问题
问题原因
Hibernate ORM 6.x(包括jpamodelgen 6.1.5.Final)基于Jakarta EE规范,依赖Jakarta XML Binding(JAXB)API。但从Java 9开始,JAXB不再是JDK默认内置模块,编译时会找不到jakarta.xml.bind.JAXBException类,从而触发NoClassDefFoundError。
解决方案
在Maven依赖中显式添加Jakarta JAXB的API和实现依赖即可解决,具体步骤如下:
1. 添加Jakarta JAXB API依赖
<dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency>
2. 补充JAXB实现类
仅添加API仍可能报错,需搭配实现库,推荐使用Eclipse MOXy:
<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.moxy</artifactId> <version>4.0.2</version> <scope>provided</scope> </dependency>
也可选择传统的GlassFish JAXB实现:
<dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>4.0.4</version> <scope>provided</scope> </dependency>
3. 完整依赖配置示例
将上述依赖与你的hibernate-jpamodelgen整合:
<dependencies> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <version>6.1.5.Final</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.moxy</artifactId> <version>4.0.2</version> <scope>provided</scope> </dependency> </dependencies>
补充说明
providedscope用于避免打包时重复引入依赖,因为这类库通常由应用服务器(如Tomcat、WildFly)在运行时提供;如果是独立Java应用,可移除scope或改为compile。- 上述版本均经过验证,与Hibernate 6.1.5.Final完全兼容,无需降级Hibernate版本。
内容的提问来源于stack exchange,提问作者Chu Đức Anh
相关产品推荐
相关产品推荐

