2017-06-09 63 views
2

我正在從Spring引導1.3遷移到1.5,並且正在爲ServletRegistrationBean獲取類未找到的錯誤。 這是預期的,因爲這已被棄用。 不能理解的是哪個jar引起了這個問題? 我想了解如何進一步調試它? 基本上如何通過罐子走,看看哪些類正在越來越加載在失敗和它是從哪裏來,所以我可以糾正我的依賴如何查找是否有任何罐子正在使用已棄用的類

我已經使用了幾個工具來遍歷罐和找到依賴關係,但沒有幫助我

org.springframework.boot.SpringApplication Application startup failed 
java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/ServletRegistrationBean 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
     at java.lang.Class.getDeclaredMethods(Class.java:1975) 
     at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613) 
     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) 
     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) 
     at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:570) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:697) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:640) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:609) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1484) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:425) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) 
     at org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$BeanPostProcessorsRegistrar.registerSyntheticBeanIfMissing(EmbeddedServletContainerAutoConfiguration.java:148) 
     at org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration$BeanPostProcessorsRegistrar.registerBeanDefinitions(EmbeddedServletContainerAutoConfiguration.java:137) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars(ConfigurationClassBeanDefinitionReader.java:354) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:143) 
     at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) 
     at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:320) 
     at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228) 
     at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270) 
     at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93) 
     at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524) 
     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) 
     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 
     at com.ail.myaccount.MyApplication.main(MyApplication.java:20) 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.ServletRegistrationBean 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 31 common frames omitted 
[INFO] [] [] 2017-06-09_12:14:59.184 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext Closing org.springframework.boot[email protected]485e36bc: startup date [Fri Jun 09 12:14:53 IST 2017]; root of context hierarchy 
[WARN] [] [] 2017-06-09_12:14:59.188 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext Exception thrown from LifecycleProcessor on context close 
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: org.springframework.boot[email protected]485e36bc: startup date [Fri Jun 09 12:14:53 IST 2017]; root of context hierarchy 
     at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:417) 
     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1002) 
     at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:961) 
     at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:794) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 
     at com.ail.myaccount.MyApplication.main(MyApplication.java:20) 
[ERROR] [] [] 2017-06-09_12:14:59.189 org.springframework.beans.factory.support.DefaultListableBeanFactory Destroy method on bean with name 'org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory' threw an exception 
java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: org.springframework.boot[email protected]485e36bc: startup date [Fri Jun 09 12:14:53 IST 2017]; root of context hierarchy 
     at org.springframework.context.support.AbstractApplicationContext.getApplicationEventMulticaster(AbstractApplicationContext.java:404) 
     at org.springframework.context.support.ApplicationListenerDetector.postProcessBeforeDestruction(ApplicationListenerDetector.java:97) 
     at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:253) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968) 
     at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033) 
     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1009) 
     at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:961) 
     at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:794) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 
     at com.ail.myaccount.MyApplication.main(MyApplication.java:20) 
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/ServletRegistrationBean 
     at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
     at java.lang.Class.getDeclaredMethods(Class.java:1975) 
     at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613) 
     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) 
     at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) 
     at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:570) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:697) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:640) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:609) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1484) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:425) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:395) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:515) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:508) 
     at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1189) 
     at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:862) 
     at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:848) 
     at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:834) 
     at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:788) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 
     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 
     at com.ail.myaccount.MyApplication.main(MyApplication.java:20) 
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.ServletRegistrationBean 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 24 more 
:bootRun FAILED 

回答

1

很可能你只是在類路徑上留下了兩個版本,APIs被混淆了。仔細檢查您的類路徑複製庫

也請reffer這個github上問題https://github.com/spring-projects/spring-boot/issues/8186

+0

我查了罐子。我所有的是spring-boot-1.5.3.RELEASE.jar 我用tattletale來檢查。 我檢查了拋出異常的類,即使這個類沒有被發現的地方(org.springframework.boot.context.embedded.ServletRegistrationBean) – anunay

+0

你是否包含org.springframework.boot:spring-boot-starter-web ??? https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/1.5.3.RELEASE – Antoniossss

+0

@AnunaySinha結帳github問題,我已經包括到我的答案 – Antoniossss

相關問題