![](/img/trans.png)
[英]Jersey Servlet - java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
[英]Instantiating a hibernate Configuration throws error: Exception in thread “main” java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
我對休眠框架還很陌生,並且正在使用Udemy課程創建一個簡單的應用程序。 我一直在下面的堆棧上得到一個“ java.lang.NoClassDefFoundError”。 似乎當我創建org.hibernate.cfg.Configuration對象時,會引發異常。 任何有關如何解決以下問題的指導將不勝感激,此休眠版本是否有故障,是否需要回溯到以前的版本?
休眠核心版本:5.3.0。最終版
休眠注釋:3.5.6。最終
My-SQL Server版本: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 Apis已從Java SE中刪除。 有多種方法可以解決此問題(如如何解決java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException中所述 ),但是最可靠的方法是添加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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.