Spring Boot 1.4.3嵌入式Tomcat NoSuchMethodError StringManager.getManager

时间:2017-01-30 13:00:48

标签: spring tomcat spring-boot

我已经更新了我的项目以使用Spring BOOT 1.4.3。代码编译和运行没有来自Eclipse Neon 1的问题。 但是当我从命令行运行时

mvn clean install -DskipTests

java -jar myweb\target\my-web-1.0-SNAPSHOT.jar

我收到运行时错误而tomcat没有启动

Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager;
        at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:43) ~[tomcat-embed-core-8.5.6.jar!/:8.5.6]

请告诉我为什么?如何在运行时查找使用哪个tomcat,我的理解是8.5.6具有编译范围(?)

请帮忙。如果建议是在POM文件的属性中使用tomcat.version或添加tomcat-juli依赖,那么请帮助我理解为什么需要它?

不耐烦的stackoverflow'ers不仅仅因为你能做到而鞭打新来者。您可以轻松地询问您是否需要我的POM,但我只使用了spring-boot-starter-web。

1 个答案:

答案 0 :(得分:1)

对于这类问题,通常是由于多个jar在类路径中具有相同的类,所以:

  1. 通过打开类型弹出窗口(在Eclipse中按CTRL + SHIFT + T)查找此类/方法的来源。它将显示包含该类的类路径中的每个jar。
  2. 在每个罐子里打开课程,看看哪个包含你的方法,哪个包含你的方法。
  3. 使用@RequestMapping(value = "/apis/test", method = RequestMethod.POST, consumes = "application/json") public @ResponseBody String test(@RequestParam final String param1, @RequestParam final String param2, @RequestBody final String body) throws JsonIOException {
  4. 显示项目的依赖关系层次结构
  5. 如果2个罐子在您的类路径中,您可以排除不包含该方法的罐子。