java - 实例化 hibernate 配置会抛出错误 : Exception in thread "main" java. lang.NoClassDefFoundError: javax/xml/bind/JAXBException

标签 java mysql spring hibernate jaxb

我是 hibernate 框架的新手,我正在使用 Udemy 类(class)创建一个简单的应用程序。我一直在以下堆栈中收到“java.lang.NoClassDefFoundError”。看来当我创建 org.hibernate.cfg.Configuration 对象时会抛出异常。任何关于如何解决以下问题的指导将不胜感激,这个 hibernate 版本是否有问题,我需要回溯到以前的版本?

Hibernate-Core 版本:5.3.0.Final

Hibernate-注释: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 Apis 已从 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

关于java - 实例化 hibernate 配置会抛出错误 : Exception in thread "main" java. lang.NoClassDefFoundError: javax/xml/bind/JAXBException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51879353/

相关文章:

java - 如何使用 NetBeans 处理通过 Java 中的 New JFrame 创建的框架?

php - 无法显示德语变音符号

java - Spring Security 中的 AuthenticationFilter 中需要 "normal"是 `ConfigurationAttribute` 吗?

java - 使用多个参数的 Spring Security 登录

java - 如何打印格式对齐列列表

java - 删除 html 标签

mysql - 处理动态图像缩略图大小调整的最佳方法是什么?

Mysql COUNT 相关表的结果行

java - 使用Spring依赖注入(inject)的观察者模式实现

java - 如何在android webview上显示网页的一部分