添加spring boot jpa依赖项时创建名称为“entityManagerFactory”的bean时出错

Posted

技术标签:

【中文标题】添加spring boot jpa依赖项时创建名称为“entityManagerFactory”的bean时出错【英文标题】:Error creating bean with name 'entityManagerFactory' when add spring boot jpa dependency 【发布时间】:2018-05-10 05:25:42 【问题描述】:

我在尝试将 JPA 添加到我的 Spring Boot 程序时遇到问题。一切正常,直到我将以下内容添加到我的 pom.xml 中(我还没有添加任何与 JPA Hibernate 相关的代码)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

运行创建的 jar 文件时出现以下错误。使用 mvn clean package 编译不会返回错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
at hello.App.main(App.java:19) [classes!/:0.1.0]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [gs-consuming-rest-0.1.0.jar:0.1.0]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [gs-consuming-rest-0.1.0.jar:0.1.0]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [gs-consuming-rest-0.1.0.jar:0.1.0]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [gs-consuming-rest-0.1.0.jar:0.1.0]

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87) ~[hibernate-core-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:179) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54) ~[spring-orm-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
... 23 common frames omitted


Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563) ~[na:na]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) ~[gs-consuming-rest-0.1.0.jar:0.1.0]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496) ~[na:na]
... 33 common frames omitted

如果我删除 spring-boot-starter-data-jpa 那么一切正常。

请帮助或指导我如何检查。

我查看了Error creating bean with name 'entityManagerFactory' defined in class path resource : Invocation of init method failed 此处的所有回复,但没有发现任何适合我的情况

【问题讨论】:

还有ClassNotFoundException: javax.xml.bind.JAXBException?也许你需要把它放在 CLASSPATH ... 【参考方案1】:

我想你的依赖是冲突的。您可以使用控制台中的命令检查它。

mvn dependency:tree -Dverbose

祝你好运。

【讨论】:

哦,谢谢。我记得在 Eclipse 中检查并看到一些 jar 被省略但不知道 Dverbose 所以我的 mvn 树看起来很正常。我还尝试排除一些省略的 jar,但仍然无法正常工作。我应该如何检查我应该使用的 entitybeanmanager 版本? 你的意思是你删除 jpa 然后它工作正常。因此,您可能无法在 Spring Boot 应用程序中正确使用它。可以参考帖子javabycode.com/spring-framework-tutorial/spring-boot-tutorial/…中spring boot中使用Jpa的方式@ 我还没有将任何与 JPA 相关的代码放在其他类中。我的意思是“删除 JPA 然后它工作正常”是在我的 pom.xml 文件中,如果我不添加“spring-boot-starter-data-jpa”的依赖项,那么应用程序编译并正确运行。所以很可能是错误的配置,但我不知道如何检查所需的版本以及缺少什么 我如何知道依赖项是否冲突?【参考方案2】:
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>

pom.xml中添加这个依赖

最新版本可以在这里找到:mvnrepository.com

【讨论】:

谢谢...我会尝试添加并更新。只是想检查一下,对于我浏览过的所有教程,都没有提到添加 xml 和 eclipselink 依赖项的要求。如果我在 Eclipse 和其他 IDE 中创建项目,它的运行方式会有所不同吗? 非常感谢。它现在正在工作。你知道它是否包含在任何其他罐子里吗?由于我浏览了在线教程,没有人提到包含这种依赖关系。 其他教程中没有提到,因为这些都是基于 java8 的,JDK8 默认包含这些类。但是,您使用的 Java 9(Spring Boot 实际上还不支持!)不再包含 JAXB... 这个解决方案对我有用,因为我在 YouTube 上遵循了 Spring Boot 教程。 谢谢!!此解决方案适用于 Spring Boot 和 Java 10。【参考方案3】:

在 Eclipse 或 STS 等任何 IDE 中的 VM 参数中尝试以下行

--add-modules java.xml.bind

祝你好运……!!

【讨论】:

【参考方案4】:

您可以通过在项目库中使用 rt.jar 文件导入来解决此问题 否 1 右键单击​​您的项目转到属性

No 2点击Java Build Path

然后看右边点击Add Variables

No 3打开一个新窗口点击Extent按钮

No 4 C:\Program Files\Java\jre1.8.0_111\lib\rt.jar 设置路径并给出变量名(a​​aa) 不是变量名问题 你可以用你的名字 asif

【讨论】:

以上是关于添加spring boot jpa依赖项时创建名称为“entityManagerFactory”的bean时出错的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot整合JPA

Spring boot集成spring-boot-starter-data-jpa环境搭建

spring-boot-starter-data-jpa 依赖错误

Spring Boot Data JPA 的问题 - 创建名称为 [重复] 的 bean 时出错

具有 JPA 依赖关系的 Flyway Spring Boot Autowired Bean

Tomcat 7 SEVERE:在 pom 中将 spring-data-jpa 添加到依赖项后,由于先前的错误,上下文 [] 启动失败