首页 > 解决方案 > Spring Boot + JPA + JAR 文件失败,并在类路径资源中定义名称为“entityManagerFactory”的 bean 创建错误

问题描述

我用 Spring Boot + JPA 创建了一个示例程序

我从https://github.com/tedyoung/spring-boot-user-rest-jpa.git下载了代码

当我从 Intellij IDE 执行时它可以工作,但是当我通过以下命令从命令行运行生成的 JAR 文件时

java -jar 目标\spring-boot-user-rest-jpa-0.0.1-SNAPSHOT.jar

它失败并出现以下错误:

2018-09-30 12:53:19.638  INFO 5316 --- [main] c.s.sample.users.UsersApplication        : Starting UsersApplication v
0.0.1-SNAPSHOT on HP with PID 5316 (C:\Pramod\JavaPOCProj\spring-boot-user-rest-jpa\target\spring-boot-user-rest-jpa-0.0.1-SNAP
SHOT.jar started by Pramod in C:\Pramod\JavaPOCProj\spring-boot-user-rest-jpa)
2018-09-30 12:53:19.662  INFO 5316 --- [main] c.s.sample.users.UsersApplication        : No active profile set, fall
ing back to default profiles: default
2018-09-30 12:53:19.783  INFO 5316 --- [main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframew
ork.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e20b53a: startup date [Sun Sep 30 12:53:19 GMT+08:00 2
018]; root of context hierarchy
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/C:/Pramod/JavaPOCProj/spring-boo
t-user-rest-jpa/target/spring-boot-user-rest-jpa-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-4.3.10.RELEASE.jar!/) to method j
ava.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2018-09-30 12:53:23.455  INFO 5316 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with por
t(s): 8080 (http)
2018-09-30 12:53:23.468  INFO 5316 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2018-09-30 12:53:23.468  INFO 5316 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Ap
ache Tomcat/8.5.16
2018-09-30 12:53:23.628  INFO 5316 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedde
d WebApplicationContext
2018-09-30 12:53:23.628  INFO 5316 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext:
 initialization completed in 3858 ms
2018-09-30 12:53:23.862  INFO 5316 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatche
rServlet' to [/]
2018-09-30 12:53:23.878  INFO 5316 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterE
ncodingFilter' to: [/*]
2018-09-30 12:53:23.878  INFO 5316 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttp
MethodFilter' to: [/*]
2018-09-30 12:53:23.878  INFO 5316 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFor
mContentFilter' to: [/*]
2018-09-30 12:53:23.878  INFO 5316 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestCon
textFilter' to: [/*]
2018-09-30 12:53:24.837  INFO 5316 --- [main] j.LocalContainerEntityManagerFactoryBean : Building JPA container Enti
tyManagerFactory for persistence unit 'default'
2018-09-30 12:53:24.884  INFO 5316 --- [main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing Persi
stenceUnitInfo [
        name: default
        ...]
2018-09-30 12:53:25.064  INFO 5316 --- [main] org.hibernate.Version                    : HHH000412: Hibernate Core {
5.0.12.Final}
2018-09-30 12:53:25.064  INFO 5316 --- [main] org.hibernate.cfg.Environment            : HHH000206: hibernate.proper
ties not found
2018-09-30 12:53:25.080  INFO 5316 --- [main] org.hibernate.cfg.Environment            : HHH000021: Bytecode provide
r name : javassist
2018-09-30 12:53:25.119  WARN 5316 --- [main] ationConfigEmbeddedWebApplicationContext : 

    Exception encountered durin
    g context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException:

     Error creating
    bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJ
    paAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bin
    d/JAXBException
    2018-09-30 12:53:25.119  INFO 5316 --- [main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
    2018-09-30 12:53:25.151  INFO 5316 --- [main] utoConfigurationReportLoggingInitializer :

    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
    2018-09-30 12:53:25.166 ERROR 5316 --- [main] o.s.boot.SpringApplication               : Application startup failed

    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 f
    ailed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableB
    eanFactory.java:1628) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBea
    nFactory.java:555) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanF
    actory.java:483) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-bea
    ns-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.jav
    a:230) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans
    -4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4
    .3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[sprin
    g-context-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationCo
    ntext.java:857) ~[spring-context-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring
    -context-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:1
    22) ~[spring-boot-1.5.6.RELEASE.jar!/:1.5.6.RELEASE]
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.6.RELEASE.jar!/:1.5.
    6.RELEASE]
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.6.RELEASE.jar
    !/:1.5.6.RELEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.6.RELEASE.jar!/:1.5.6.RE
    LEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.6.RELEASE.jar!/:1.5.6.R
    ELEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.6.RELEASE.jar!/:1.5.6.R
    ELEASE]
            at co.spirallearning.sample.users.UsersApplication.main(UsersApplication.java:10) [classes!/:0.0.1-SNAPSHOT]
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
            at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
            at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [spring-boot-user-rest-jpa-0.0.1-SNAP
    SHOT.jar:0.0.1-SNAPSHOT]
            at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [spring-boot-user-rest-jpa-0.0.1-SNAPSHOT.jar:0.0.
    1-SNAPSHOT]
            at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [spring-boot-user-rest-jpa-0.0.1-SNAPSHOT.jar:0.0.
    1-SNAPSHOT]
            at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [spring-boot-user-rest-jpa-0.0.1-SNAPSHOT.jar:
    0.0.1-SNAPSHOT]
    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.j
    ar!/: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) ~[h
    ibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]
            at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149) ~[h
    ibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final]
            at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringH
    ibernateJpaPersistenceProvider.java:54) ~[spring-orm-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEn
    tityManagerFactoryBean.java:353) ~[spring-orm-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFa
    ctoryBean.java:370) ~[spring-orm-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.jav
    a:359) ~[spring-orm-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapab
    leBeanFactory.java:1687) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableB
    eanFactory.java:1624) ~[spring-beans-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]
            ... 24 common frames omitted
    Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
            at java.base/java.net.URLClassLoader.findClass(Unknown Source) ~[na:na]
            at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[na:na]
            at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) ~[spring-boot-user-
    rest-jpa-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
            at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[na:na]
            ... 34 common frames omitted

标签: springjpajar

解决方案


推荐阅读