java - 实例化休眠配置引发错误:线程“主”java.lang.NoClassDefFoundError 中的异常:javax/xml/bind/JAXBException
问题描述
我对休眠框架相当陌生,我正在使用 Udemy 课程创建一个简单的应用程序。我一直在以下堆栈上收到“java.lang.NoClassDefFoundError”。看来,当我创建 org.hibernate.cfg.Configuration 对象时,会引发异常。任何关于如何解决以下问题的指导都将不胜感激,这个休眠版本是否有问题,我需要回溯到以前的版本?
Hibernate-Core 版本:5.3.0.Final
休眠注释:3.5.6.Final
MySQL 服务器版本:8.0.12
DEBUG - Logging Provider: org.jboss.logging.Log4jLoggerProvider
DEBUG - Adding Integrator [org.hibernate.cfg.beanvalidation.BeanValidationIntegrator].
DEBUG - Adding Integrator [org.hibernate.secure.spi.JaccIntegrator].
DEBUG - Adding Integrator [org.hibernate.cache.internal.CollectionCacheInvalidator].
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:123)
at org.hibernate.cfg.Configuration.<init>(Configuration.java:118)
at com.dataPack.data.HibernateUtil.buildSessionFactory(HibernateUtil.java:16)
at com.dataPack.data.HibernateUtil.<clinit>(HibernateUtil.java:10)
at com.dataPack.data.Application.main(Application.java:9)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 7 more
这是我创建的用于构建 sessionFactory 的 HibernateUtil 类。
package com.dataPack.data;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
Configuration configuration = null;
try {
configuration = new Configuration();
return configuration
.buildSessionFactory(new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build());
} catch(Exception e) {
e.printStackTrace();
throw new RuntimeException("Issue Building Session Factory!");
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
这是我们假设使用的 hibernate.properties 文件。
hibernate.connection.username=user
hibernate.connection.password=password
hibernate.connection.url=jdbc:mysql://localhost:3306/ifinances
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
解决方案
由于已知该项目可以工作,因此其他人可能使用了不同的 Java 版本,因为 jaxb API 已从 Java SE 中删除。有多种方法可以解决这个问题(详见How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9),但最可靠的是添加 jaxb API 依赖项(groupId javax.xml.bind, artifactId jaxb-api - https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api/2.3.0)到 pom.xml 或 gradle 构建文件。
然后重建,如果您仍然遇到 ClassNotFound 错误,请参阅https://stackoverflow.com/a/43574427/9705485
推荐阅读
- reactjs - 我们可以将 kafka 与 react native 集成吗
- java - 具有内部比较器类的 PriorityQueue
- java - 类需要一个找不到的“java.lang.String”类型的 bean
- html - css 在固定高度旁边有一个全高 div?
- javascript - 带有重定向和回显到页面的 Ajax 值
- git - Is there a way to set a branch always rebased from another branch?
- javascript - Angular Build 逆向工程:如何将缩小的 javascript 文件还原为其原始打字稿形式
- r - FUN(dd[x, ], ...) 中的错误:使用 by() 找不到函数“FUN”
- posix - 重置getopt()的便携式方法是什么?
- javascript - 同时点击2个元素?