【问题标题】:spring boot 2.0.2.RELEASE with spring 5.0.6.RELEASE NoSuchMethodError AbstractHandlerMapping.obtainApplicationContextspring boot 2.0.2.RELEASE 与 spring 5.0.6.RELEASE NoSuchMethodError AbstractHandlerMapping.obtainApplicationContext
【发布时间】:2018-10-22 09:27:26
【问题描述】:

我对@9​​87654321@ 和SpringBoot 插件比较陌生。

我正在尝试以Jetty 作为容器创建一个SpringBoot WAR 文件。

我正在使用 SpringBoot 2.0.2.RELEASEspring-boot-starter-jetty,它引入了 Spring 5.0.6.RELEASEJetty 9.4.10.v20180503(据我所知可以说是兼容的)。

我在我的 WAR 文件中看不到任何版本不一致,但是在运行组装好的 bootWar 时,我得到以下异常:

[2018-05-11T18:28:09,432 ERROR main SpringApplication] 应用程序运行失败 org.springframework.boot.web.server.WebServerException:无法启动嵌入式 Jetty 服务器 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.start(JettyWebServer.java:167) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:300) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 com.focusvq.fts.spring.Application.main(Application.java:17) [classes!/:1.0] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_101] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_101] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_101] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_101] 在 org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [fts-data-1.0.war:1.0] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [fts-data-1.0.war:1.0] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [fts-data-1.0.war:1.0] 在 org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58) [fts-data-1.0.war:1.0] 引起:javax.servlet.ServletException: dispatcherServlet@7ef5559e==org.springframework.web.servlet.DispatcherServlet,jsp=null,order=-1,inst=false 在 org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:691) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:427) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.handleDeferredInitialize(JettyWebServer.java:209) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.start(JettyWebServer.java:141) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] ... 18 更多 原因:org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping”的bean时出错:bean初始化失败;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.web.servlet.handler.AbstractHandlerMapping.obtainApplicationContext()Lorg/springframework/context/ApplicationContext; 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:587) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:303) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.createDefaultStrategy(DispatcherServlet.java:879) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.getDefaultStrategies(DispatcherServlet.java:847) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.initHandlerMappings(DispatcherServlet.java:606) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:501) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:490) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:561) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:499) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:172) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 javax.servlet.GenericServlet.init(GenericServlet.java:244) ~[javax.servlet-api-3.1.0.jar!/:3.1.0] 在 org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:670) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:427) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.handleDeferredInitialize(JettyWebServer.java:209) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.start(JettyWebServer.java:141) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] ... 18 更多 引起:java.lang.NoSuchMethodError: org.springframework.web.servlet.handler.AbstractHandlerMapping.obtainApplicationContext()Lorg/springframework/context/ApplicationContext; 在 org.springframework.web.servlet.handler.AbstractHandlerMapping.detectMappedInterceptors(AbstractHandlerMapping.java:269) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.handler.AbstractHandlerMapping.initApplicationContext(AbstractHandlerMapping.java:243) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext(AbstractDetectingUrlHandlerMapping.java:58) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.context.support.ApplicationObjectSupport.initApplicationContext(ApplicationObjectSupport.java:120) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.web.context.support.WebApplicationObjectSupport.initApplicationContext(WebApplicationObjectSupport.java:77) ~[spring-web-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.java:74) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:121) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:97) ~[spring-context-4.3.12.RELEASE.jar!/:4.3.12.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:303) ~[spring-beans-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.createDefaultStrategy(DispatcherServlet.java:879) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.getDefaultStrategies(DispatcherServlet.java:847) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.initHandlerMappings(DispatcherServlet.java:606) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.initStrategies(DispatcherServlet.java:501) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.DispatcherServlet.onRefresh(DispatcherServlet.java:490) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:561) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:499) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:172) ~[spring-webmvc-5.0.6.RELEASE.jar!/:5.0.6.RELEASE] 在 javax.servlet.GenericServlet.init(GenericServlet.java:244) ~[javax.servlet-api-3.1.0.jar!/:3.1.0] 在 org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:670) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:427) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760) ~[jetty-servlet-9.4.10.v20180503.jar!/:9.4.10.v20180503] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext$JettyEmbeddedServletHandler.deferredInitialize(JettyEmbeddedWebAppContext.java:46) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyEmbeddedWebAppContext.deferredInitialize(JettyEmbeddedWebAppContext.java:36) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.handleDeferredInitialize(JettyWebServer.java:209) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] 在 org.springframework.boot.web.embedded.jetty.JettyWebServer.start(JettyWebServer.java:141) ~[spring-boot-2.0.2.RELEASE.jar!/:2.0.2.RELEASE] ... 18 更多

它正在加载org.springframework.web.servlet.handler.AbstractHandlerMapping 的版本5.0.6.RELEASE,它确实没有obtainApplicationContext 方法。

我必须关闭 MongoAutoConfigurationWebMvcAutoConfiguration 才能达到这一点,但关闭 EmbeddedWebServerFactoryCustomizerAutoConfiguration 似乎没有帮助。任何人都可以对我可能出错的地方有所了解吗?

【问题讨论】:

    标签: spring-boot gradle jetty


    【解决方案1】:

    发现问题 - 该方法是从我有旧版本的 spring 上下文包中的 org.springframework.context.support.ApplicationObjectSupport 继承的。呃

    【讨论】: