java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException和java.lang.IllegalStateException: Failed to load ApplicationContext

在学习SpringDataJPA时,遇到了两个问题,在此记录一下

原博客链接:

点我

第一个:

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

第二个:

Arjava.lang.IllegalStateException: Failed to load ApplicationContext

刚开始以为是applicationContext.xml的路径写错了,然后我点了点,能进去啊,便继续往后看错误信息:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext-jpa.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

拉倒最后才看到,,,
报错.png

这就和第一个问题一样了,按原博客所说,两种解决方案:

  1. 换jdk版本,jdk8或7都行

  2. 在pom.xml中加入以下依赖

    <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>
    
    
    

    即可解决

解决.png

在原博客评论中看到的报错原因:

产生这个问题的原因主要是使用JDK 9.0 及其以上,JDK9做了巨大改变(推荐使用JDK8,至于原因大家可以百度Oracle发布JDK的规则,现在公司做开发也基本都是使用的JDK8,很少会使用9及以上)。 可以下载javax.activation-1.2.0.jar,jaxb-api-2.3.0.jar,jaxb-core-2.3.0.jar,jaxb-impl-2.3.0.jar四个jar包 JAXB API是java EE的API,而java EE的API不再包含对java SE 9的模块中,因此JAXB APIs不再包含在java SE 9的默认类路径中,因此引发了以上报错


代码书写世界,吉他演奏生活