Hibernate 在某些CentOS机器上将war部署到Tomcat时,ClassNotFoundException

Hibernate 在某些CentOS机器上将war部署到Tomcat时,ClassNotFoundException,hibernate,tomcat,centos,classnotfoundexception,Hibernate,Tomcat,Centos,Classnotfoundexception,我有一份战争档案。它是Java8Maven应用程序,带有一些Spring和Hibernate。 我可以在本地计算机(macOS)上成功部署它。 我还可以在安装了CentOS 3.10.0-514.el7.x86_64的VMware Fusion虚拟机上成功部署它。 但我无法在某些CentOS 3.10.0-514.2.2.el7.x86_64服务器上部署它。我得到下一个ClassNotFoundException: 17-Feb-2017 18:21:54.727 SEVERE [localho

我有一份战争档案。它是Java8Maven应用程序,带有一些Spring和Hibernate。 我可以在本地计算机(macOS)上成功部署它。 我还可以在安装了CentOS 3.10.0-514.el7.x86_64的VMware Fusion虚拟机上成功部署它。 但我无法在某些CentOS 3.10.0-514.2.2.el7.x86_64服务器上部署它。我得到下一个ClassNotFoundException:

17-Feb-2017 18:21:54.727 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/appContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl$Work
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1823)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl$Work
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
        ... 25 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$Work
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
        ... 31 more
在这三种情况下,我只下载了jdk1.8.0_121-b13和ApacheTomcat 8.5.11,并指出了Tomcat的JAVA_主页(在$CATALINA_HOME/bin/setenv.sh中)以指向我放置JDK的文件夹

具有hibernate依赖项的POM部分:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.10.Final</version>
</dependency>

org.hibernate
冬眠核心
5.2.1.最终版本
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.1决赛
org.hibernate
休眠实体管理器
4.3.10.最终版本

您不使用最新版本的所有3个版本的原因是什么?我们刚刚试用了最新的Tomcat v9.0.0.M17-结果相同。Java v1.8.0_121已经是最新版本。我无法更改CentOS的版本(3.10.0-514.2.2.el7.x86_64),因为它是主机还是hibernate版本?我没有应用程序的源代码(只有war),但我将尝试在{application}/WEB-INF/lib中替换hibernate jar,并在这里对结果进行评论。我已将libs更改为hibernate-core-5.2.8.Final.jar和hibernate-entitymanager-5.2.8.Final.jar(hibernate-jpa-2.1-api-1.0.Final已经是最新版本)最后它成功了。war已成功部署到Tomcat v9.0.0.M17中。是的,我指的是JAR。很高兴听到他们成功了。