真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException今天在使用JDK9.0环境下使用Hibernate时候出现了这个错误,错误日志如下:故障原因:JAXBAPI是javaEE的API,因此在javaSE9.0中不再包含这个Jar包。java9中引入了模块的概念,默认情况下,JavaSE中将不再包含javaEE的Jar包而在java6/7/8时关于这个API都是捆绑在一起的…

大家好,又见面了,我是你们的朋友全栈君。

真正解决方案:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException

1. 故障描述

今天在使用JDK 9.0 环境下使用Hibernate 时候出现了这个错误,错误日志如下:

这里写图片描述

2. 故障原因分析

JAXB API是java EE 的API,因此在java SE 9.0 中不再包含这个 Jar 包。
java 9 中引入了模块的概念,默认情况下,Java SE中将不再包含java EE 的Jar包
而在 java 6/7 / 8 时关于这个API 都是捆绑在一起的

3.解决方案

3.1 解决方案一

降低JDK 9 版本到 JDK 6/7/8

3.2 解决方案二(亲测可行)

手动加入这些依赖Jar包

要解决这个问题,我导入了下面这四个Jar包修复成功。

javax.activation-1.2.0.jar

jaxb-api-2.3.0.jar

jaxb-core-2.3.0.jar

jaxb-impl-2.3.0.jar

下载上面这些文件和复制他们到libs文件夹下,
添加他们导入到Build Path中
重新运行即可

3.3 解决方案三

Maven项目可添加如下依赖:

<!-- Java 6 = JAX-B Version 2.0 -->
<!-- Java 7 = JAX-B Version 2.2.3 -->
<!-- Java 8 = JAX-B Version 2.2.8 -->
<dependencies>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

Gradle 项目引入依赖:

dependencies { 
   
    // JAX-B dependencies for JDK 9+
    implementation "javax.xml.bind:jaxb-api:2.3.0"
    implementation "com.sun.xml.bind:jaxb-core:2.3.0"
    implementation "com.sun.xml.bind:jaxb-impl:2.3.0"
    implementation "javax.activation:activation:1.1.1"
}

Tips:
建议使用中心仓库,否则可能某些jar找不到:

HTTP: http://repo1.maven.org/maven2
HTTPS:https://repo1.maven.org/maven2

原文地址

测试代码:

public class DatabaseConnectionTools { 
   
    private static final SessionFactory ourSessionFactory;

    static { 
   
        try { 
   
            Configuration configuration = new Configuration();
            configuration.configure();

            ourSessionFactory = configuration.buildSessionFactory();
        } catch (Throwable ex) { 
   
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() throws HibernateException { 
   
        return ourSessionFactory.openSession();
    }

    public static void main(final String[] args) throws Exception { 
   
        final Session session = getSession();
        try { 
   
            System.out.println("querying all the managed entities...");
            final Metamodel metamodel = session.getSessionFactory().getMetamodel();
            for (EntityType<?> entityType : metamodel.getEntities()) { 
   
                final String entityName = entityType.getName();
                final Query query = session.createQuery("from " + entityName);
                System.out.println("executing: " + query.getQueryString());
                for (Object o : query.list()) { 
   
                    System.out.println(" " + o);
                }
            }
        } finally { 
   
            session.close();
        }
    }
}

Tips: 如果做完上述操作,仍然报错,请检查out 文件夹下的lib 文件夹中是否包含刚添加的几个Jar包,如果没有,那么请继续下面的操作:
这里写图片描述
选中project,然后右键选择open module settings
这里写图片描述
然后检查Problem选项卡,检查右侧是否有‘Fixed’ 字样,如果有,请点击’Fixed’
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162495.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ubuntu16.04 安装 dstat,使用 报错「建议收藏」

    ubuntu16.04 安装 dstat,使用 报错「建议收藏」报错hairui@hadoop:~$dstatFile"/usr/bin/dstat",line119exceptgetopt.error,exc:^SyntaxError:invalidsyntaxhairui@hadoop:~$dstat程序“dstat”尚未安装。您可以使用以下命令安装:sudo…

  • smtp搭建_smtp服务器指的是什么服务器

    smtp搭建_smtp服务器指的是什么服务器应用目标:更稳定地发送邮件实现难度:★★☆☆☆我们在发送电子邮件的时候,这封E-mail首先来到ISP提供的邮件服务器,再通过它发送出去。但如果ISP因为网络出现一些问题,则可能会耽搁邮件的发送,甚至可能会造成邮件丢失。如果用自己的机器做SMTP服务器来发邮件,那肯定不会出现上述情况啦!怎么样,心动了吧?下面咱们就一起来架设一个属于自己的SMTP服务器,让你的E-mail发送更安全。一、SMTP服…

  • 基于单片机的八路抢答器设计论文_抢答器的程序流程图

    基于单片机的八路抢答器设计论文_抢答器的程序流程图文末下载完整资料1.1八路扫描式抢答器的概述  本文介绍的八路数显抢答器具有电路简单、成本较低、操作方便、灵敏可靠等优点,经使用效果良好,具有较高的推广价值。无线遥控抢答器,它由8个发射器和1个接收器组成,可用于8组或8组以下的智力竞赛中。比赛前,将参赛组从0至7编号,每组发给对应的一个发射器。将接收器放于各组中央或前方。主持人按一下启动键后,抢答开始。此后,哪一组最先按下发射器上的抢答键,接收器就立即显示该组的组号并锁定,同时发出3次清脆的“叮咚”声。以后,按下任何一路抢答键均不起反映。只有主

    2022年10月20日
  • 力扣算法题—060第K个排列

    力扣算法题—060第K个排列

  • SAP MM物料管理系统功能详解

    SAP MM物料管理系统功能详解

  • 什么是SQL_SQL SERVER

    什么是SQL_SQL SERVER参考:SQL中的declare用法sql中的变量定义declare变量是在批处理或过程的主体中用DECLARE语句声明的,并用SET或SELECT语句赋值。而SQL中是以GO语句来区分批处理的。所以在例子中一个简单的if语句中定义的变量,可以在if语句外面使用。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号