Spring Boot运行配置问题

时间:2015-06-08 07:08:45

标签: maven spring-boot m2e spring-tool-suite

我正在尝试在STS上的tomcat8容器中运行我的spring启动应用程序(通过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中查看项目的运行配置(通过Run As - > Run Configurations)。我发现Source选项卡显示了版本8.0.20以上的tomcat 7.0.53以及maven中未引用的几个依赖项。我不知道这些价值来自哪里,不知道如何编辑它。出于某种原因,当我尝试手动删除这些遗留的jar文件时,STS不允许我删除它们中的任何一个。

有没有人知道这些依赖关系可能来自哪里以及我如何删除它们?

他们确实引用了我的$HOME/.m2/path/to/tomcat-catalina/<version>目录,所以我可以简单地从我的.m2中删除它们,理论上它可能会有效但是如果我不必这样做,我宁愿不这样做。

我使用的是spring boot 1.2.x,所有这些都有这个问题。

感谢。

2 个答案:

答案 0 :(得分:0)

我有两个想法,你可能会尝试。

1)这可能是STS 3.6.4中此错误的表现:https://issuetracker.springsource.com/browse/STS-4085

您不希望看到的依赖关系可能来自maven“测试”范围。 (该bug明确提到'srt / test',但jar依赖项也是如此)。您可以通过在主类上使用常规的“Run As Java Application”来验证此错误是否是原因。

如果可以,那几乎可以肯定是这个bug。如果它也失败并出现类似错误,那么其他东西......然后尝试:

2)你必须从某个地方获取不需要的tomcat版本,可能间接地作为其他东西的依赖。

尝试使用m2e'依赖层次结构'来查找它的来源,如下所示:

  • open pom.xml
  • 单击“依赖关系层次结构”选项卡。
  • 在“过滤器”框中输入“tomcat”。

答案 1 :(得分:0)

我终于明白了。

在我的$ WORKSPACE / .metadata / .plugins / org.eclipse.m2e.core / workspacestate.properties中,它列出了使用maven插件构建的工作区中的所有poms,jar和war。我注意到文件中的pom指向我的spring启动项目中加载的确切版本tomcat。一旦我从STS中删除了这些项目,我就可以成功启动弹簧启动应用程序: - )

当我将maven项目重新导入STS时,会再次出现错误,然后在删除它时消失。

这些项目与我尝试启动的项目无关。因此我认为这个错误是在m2e。

我会提交错误并在完成后更新此帖子。

感谢@Kris与我共同努力。