【发布时间】:2015-06-08 07:08:44
【问题描述】:
我正在尝试在 STS 上的 tomcat8 容器中运行我的 Spring Boot 应用程序(通过 Run As -> Spring Boot Application),我收到以下错误:
Caused by: java.lang.IllegalStateException: Expected method not found: java.lang.NoSuchMethodException: org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedContext.addApplicationListener(org.apache.catalina.deploy.ApplicationListener)
at org.springframework.util.ClassUtils.getMethod(ClassUtils.java:627)
at org.springframework.boot.autoconfigure.websocket.TomcatWebSocketContainerCustomizer.addListener(TomcatWebSocketContainerCustomizer.java:85)
at org.springframework.boot.autoconfigure.websocket.TomcatWebSocketContainerCustomizer.access$100(TomcatWebSocketContainerCustomizer.java:36)
at org.springframework.boot.autoconfigure.websocket.TomcatWebSocketContainerCustomizer$1.customize(TomcatWebSocketContainerCustomizer.java:50)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.configureContext(TomcatEmbeddedServletContainerFactory.java:355)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:184)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:154)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 7 more
我已经搜索了很多,但几乎没有发现可以指导我找出问题所在。在调试器中查看 Spring Boot 代码后,我看到 TomcatWebSocketContainerCustomizer.addListener() 中引用的名为“instance”的对象使用反射来检索它的句柄。此对象与 tomcat 7.0.53 jar ($HOME/.m2/repository/org/apache/tomcat/tomcat-catalina/7.0.53/tomcat-catalina-7.0.53.jar) 相关联。我在我的任何 maven 依赖项中都没有看到这一点,并且尝试了几种技术来强制它到 tomcat 8.0.20,似乎没有任何效果。
敲了一阵子后,我开始在 STS 中查看项目的运行配置(通过运行方式 -> 运行配置)。我发现 Source 选项卡显示了高于版本 8.0.20 的 tomcat 7.0.53 以及 maven 中未引用的几个依赖项。我不知道这些值的来源,也不知道如何编辑它。出于某种原因,当我尝试手动删除这些遗留 jar 文件时,STS 不允许我删除它们中的任何一个。
是否有人知道这些依赖项可能来自何处以及如何删除它们?
它们确实引用了我的 $HOME/.m2/path/to/tomcat-catalina/<version> 目录,所以我可以简单地将它们从我的 .m2 中删除,理论上它可能会起作用,但如果我不必这样做,我宁愿不这样做。
我用的是spring boot 1.2.x,全都有这个问题。
谢谢。
【问题讨论】:
标签: maven spring-boot m2e spring-tool-suite