问题描述:
客户现场使用东方通部署war包时报错NoClassDefFoundError错误,家里使用相同东方通版本部署,无报错,检查WEB-INF目录下lib中,存在对应jar包,同时部署方式为子优先加载,排除部署问题。
[2022-02-24 16:06:02] [SEVERE] [core] [StandardWrapper.Throwable]
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘********Service’: Unsatisfied dependency expressed through field ‘*****Dao’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘taskContrastDao’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sessionFactory’ defined in ServletContext resource [/WEB-INF/conf/spring-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
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.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:668)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:682)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:553)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:494)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)
原因分析:
使用东方通检测jar包冲突,发现东方通lib目录下和lib/endorsed目录下存在冲突jar包,同时查看家里环境lib目录下存在jar包相同,可以排除此jar包影响,就剩下lib/endorsed目录了;当我把此目录下jar包删除后,完美解决此问题。
根本原因:查看东方通官方文档发现部署的应用希望依赖非服务器默认提供的javaee api 版本,可以将期望版本的jar包放到东方通lib/endorsed中实现api的替换本次就是存在hibernate3.0版本的jar包,导致我们工程依赖的hibernate4.0版本被替换导致。 建议尽量放到自己应用目录下,不要影响其他应用,或者采用其他方式,特别是友商公司
解决方案:
干掉lib/endorsed目录下jar包,临时解决。