真正解决方案: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’
这里写图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • edge 浏览器打开总跳向 hao.360

    edge 浏览器打开总跳向 hao.360edge浏览器突然每次打开都跳向hao.360.com注册表查找hao.360.com找不到发线每次调换都会 http://511zdqdkj.yc.anhuang.net先到这个域名拿这个域名搜索也找不到没办法通过改注册表的方式恢复用tengxun管家修改浏览器主页不生效win10升级win11不生效升到win11仍不生效,觉得没办法了就将hao.360.com解析到127.0.0.1至少不用看广告了。后面发现在win11下方的任务栏点击

    2022年7月26日
    16
  • mac 开启hidpi_开启hidpi的缺点

    mac 开启hidpi_开启hidpi的缺点在macOS10.15之后,系统中存放DisplayProductID和DisplayVendorID的文件夹Overrides变为只读,若有些tool开HiDPI遇到一些麻烦或失灵的情况,可参考下文用one-key-hidpi的简易方法,具体如下:测试环境:(1)电脑:MacbookPro(2)系统:macOSCatalina10.15.6(3)显示器:SW270C…

    2022年4月19日
    2.6K
  • Jenkins详细教程

    Jenkins详细教程大纲  1.背景  在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;  或者前后端分离后,经常会修改接口,然后重新部署;  这些情况都会涉及到频繁的打包部署;  手动打包常规步骤:  1.提交代码  2.问一下同组小伙伴有没有要提交的代码  3.拉取代码并打包(war包,或者jar包)  4.上传到Linux服务器  5.查看当前程序是否在运行  6.关闭当前程序  .

    2022年5月15日
    65
  • Mbus主机常用发送命令解析[通俗易懂]

    Mbus主机常用发送命令解析[通俗易懂]在进行Mbus通信时,一些常见的命令会有混淆或者不清楚,下面进行一些总结。Mbus通信的命令格式有几种,分别如下图:其中“SingleCharacter”主要是用于从机回复“确认”信息,一般是一个“E5”作为回复。“ShortFrame”是短命令,也叫一级地址命令,我们经常使用的“10 5B FE 59 16”就是这种命令。“ControlFrame”为控制命令,

    2022年10月15日
    2
  • STM32F103学习笔记三 串口通信

    STM32F103学习笔记三 串口通信本文参照正点原子STM32F1xx官方资料:《STM32中文参考手册V10》-第25章通用同步异步收发器(USART)及【STM32】串口通信基本原理(超基础、详细版)单片机入门学习十STM32单片机学习七串口通讯-风水月的专栏](https://blog.csdn.net/fengshuiyue/article/details/79095389)1、串口通信背景知识1.1、…

    2022年10月9日
    2
  • pycharmhtml插件_pycharm官方中文插件

    pycharmhtml插件_pycharm官方中文插件一、常用配置一、设置文件字符编码二、设置文件模板三、设置文字大小四、修改行数和方发线五、关闭应用更新二、常用插件RainbowCSV将CSV的不同的列用不同的颜色标出RainbowBrackets将每对匹配的括号都变成彩色的IndentRainbow将索引变成彩色CodeGlance在右边生成代码缩略图MaterialTheme不同风格的主题Chinese(Simplified)LanguagePack中文语言包Ke

    2025年7月8日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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