Spring Boot Error:java.lang.NoSuchMethodError:org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter

我目前正在使用Spring编写API后端,我希望使用Spring Boot将其部署到生产服务器上。

如果我在Eclipse中运行后端编译为war(在Maven中指定)并使用Tomcat 7,它运行没有问题。

但是,由于我想部署到服务器,我使用的是Spring Boot。

Application.java

package com.ninjasquare.server; import java.util.Arrays; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(Application.class, args); System.out.println("NinjaSquare server up and running with Spring Boot!"); System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } } } 

的pom.xml

  4.0.0 com.ninjasquare NinjaSquareServer  war 0.0.1-SNAPSHOT   org.springframework.boot spring-boot-starter-parent 1.2.3.RELEASE   1.7  <!-- 7.0.59 --> <!-- 4.1.6.RELEASE --> 3.1.1.RELEASE 1.6.10 1.6.6 1.8 2.2.0.RELEASE 2.5 1.2.15 1 3.0.1 2.1 1.2 1.1.1.RELEASE 4.4 2.2.2 4.3.1.Final 7.0.22.3 1.8.2 2.0.1.RELEASE 2.9 2.5.1 1.2.1 2.4 2.6    <!--  com.ninjasquare.common ninjasquarecommon 0.01  -->   <!--  org.springframework.boot spring-boot-dependencies 1.2.3.RELEASE pom import  -->  org.springframework.boot spring-boot-starter-web    org.springframework spring-core 4.1.6.RELEASE   javax.el el-api 2.2 provided   org.glassfish.web el-impl 2.2    com.sun.jersey jersey-core ${jersey.version}   com.sun.jersey jersey-server ${jersey.version}   com.sun.jersey jersey-json ${jersey.version}    org.springframework.data spring-data-neo4j <!-- ${org.springframework.data.version} -->    org.springframework spring-test <!-- ${org.springframework.spring-test} -->    org.springframework spring-context <!-- ${org.springframework-version} -->    commons-logging commons-logging     org.springframework spring-webmvc <!-- ${org.springframework-version} -->    org.aspectj aspectjrt <!-- ${org.aspectj-version} -->    log4j log4j <!-- ${log4j.version} -->   javax.mail mail   javax.jms jms   com.sun.jdmk jmxtools   com.sun.jmx jmxri      javax.inject javax.inject ${javax.inject.version}    javax.servlet javax.servlet-api <!-- ${javax.servlet.version} --> provided   javax.servlet.jsp jsp-api ${javax.servlet.jsp.version} provided   javax.servlet jstl <!-- ${javax.servlet.jstl.version} -->    org.springframework.social spring-social-facebook <!-- ${spring-social-facebook-version} -->    junit junit <!-- ${junit.version} --> test   cglib cglib ${cglib.version}   org.hibernate hibernate-validator <!-- ${org.hibernate.version} -->    com.github.jsimone webapp-runner ${com.github.jsimone.version} provided   com.sun.jersey.contribs jersey-spring ${jersey.version}   org.springframework spring   org.springframework spring-aop   org.springframework spring-core   org.springframework spring-web   org.springframework spring-beans   org.springframework spring-context     org.neo4j.app neo4j-server ${org.neo4j.app.version}   org.neo4j.app neo4j-server static-web ${org.neo4j.app.version}  <!--  org.springframework.data spring-data-neo4j-rest ${spring-data-neo4j.version}  -->  org.simpleframework simple-xml 2.7       org.springframework.boot spring-boot-maven-plugin   maven-eclipse-plugin <!-- ${maven-eclipse-plugin.version} -->   org.springframework.ide.eclipse.core.springnature   org.springframework.ide.eclipse.core.springbuilder  true true    org.apache.maven.plugins maven-compiler-plugin <!-- ${org.apache.maven.plugins.version} -->  ${java-version} ${java-version} -Xlint:all true true    org.codehaus.mojo exec-maven-plugin <!-- ${org.codehaus.mojo} -->  org.test.int1.Main    <!--  org.apache.maven.plugins maven-dependency-plugin ${org.apache.maven.plugins.maven-dependency-plugin}   package  copy     com.github.jsimone webapp-runner ${com.github.jsimone.version} webapp-runner.jar       -->   org.apache.maven.plugins maven-surefire-plugin <!-- ${org.apache.maven.plugins.maven-surefire-plugin} -->   org.apache.maven.surefire surefire-junit47 ${org.apache.maven.plugins.maven-surefire-plugin}     **/testcases/*.class       

当我将整个项目复制到我的linux服务器,并运行maven包时 ,代码编译没有问题。 当我然后用java -jar [文件名]运行生成的jar文件时,我收到以下错误:

 09:17:26.946 [main] ERROR osboot.SpringApplication - Application startup failed org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474) ~[spring-context-4.1.6.RELEASE.jar!/:4.1.6.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) [spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:0.0.1-SNAPSHOT] at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75] Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner$Tomcat8TldSkipSetter.setSkipPattern(SkipPatternJarScanner.java:106) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.setPatternToTomcat8SkipFilter(SkipPatternJarScanner.java:61) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.(SkipPatternJarScanner.java:56) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.apply(SkipPatternJarScanner.java:87) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:168) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:154) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) ~[spring-boot-1.2.3.RELEASE.jar!/:1.2.3.RELEASE] ... 13 common frames omitted 

我认为问题是因为我没有正确版本的Spring / Spring Boot运行(也许它正在尝试使用不正确的Tomcat版本,因此该方法不存在?)

更新2015-04-06:我尝试了kucing_terbang使用spring boot v1.1.10的建议,但现在得到如下错误:

 [Stacktrace deleted, as out of space for stackoverflow question, refer to stacktrace of v1.1.12.RELEASE below] 

更新2015-04-07:然后我尝试使用v1.1.12.RELEASE,它给出了类似的错误:

 07:41:29.917 [main] INFO osbfaAutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 07:41:29.949 [main] WARN osbceAnnotationConfigEmbeddedWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:124) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476) ~[spring-context-4.0.9.RELEASE.jar!/:4.0.9.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na] at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75] Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:174) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:147) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:121) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] ... 13 common frames omitted 07:41:29.952 [main] ERROR osboot.SpringApplication - Application startup failed org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:124) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:476) ~[spring-context-4.0.9.RELEASE.jar!/:4.0.9.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:109) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:691) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) [spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at com.ninjasquare.server.Application.main(Application.java:13) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_75] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_75] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_75] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_75] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) [NinjaSquareServer-0.0.1-SNAPSHOT.jar!/:na] at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75] Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:174) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:147) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:121) ~[spring-boot-1.1.12.RELEASE.jar!/:1.1.12.RELEASE] ... 13 common frames omitted 

然后我再次尝试了一个mvn clean和mvn包,这在编译时给了我以下错误:

 [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol symbol: class SpringBootApplication location: package org.springframework.boot.autoconfigure [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol symbol: class SpringBootApplication [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol symbol: class SpringBootApplication location: package org.springframework.boot.autoconfigure [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol symbol: class SpringBootApplication [INFO] 4 errors [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 12.839s [INFO] Finished at: Tue Apr 07 07:31:41 BST 2015 [INFO] Final Memory: 24M/63M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project NinjaSquareServer: Compilation failure: Compilation failure: [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol [ERROR] symbol: class SpringBootApplication [ERROR] location: package org.springframework.boot.autoconfigure [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol [ERROR] symbol: class SpringBootApplication [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[6,46] cannot find symbol [ERROR] symbol: class SpringBootApplication [ERROR] location: package org.springframework.boot.autoconfigure [ERROR] /home/dengke/test_garden/NinjaSquareServer-DS-ServerDeploymentPOC-2015-04-04/src/main/java/com/ninjasquare/server/Application.java:[9,2] cannot find symbol [ERROR] symbol: class SpringBootApplication [ERROR] -> [Help 1] 

但是,如果我使用v1.2.3.RELEASE我没有得到编译错误,如果我然后更改为v1.1.12.RELEASE并运行mvn包而没有干净,我也没有得到错误(但我得到了像以前一样运行jar时出错)。

也许这表明了一个更深层次的问题?

任何有关此问题的帮助将不胜感激。

谢谢!

我试图在我的本地电脑上运行你的代码,并且有一个类似于你所在地发生的错误。 而且,这些是我为消除这些错误所采取的步骤。

  1. 更新spring boot版本

      org.springframework.boot spring-boot-starter-parent 1.1.12.RELEASE  
  2. 更新主类,因为@SpringBootApplication注释仅在Spring引导版本1.2.0之后存在

     @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(Application.class, args); System.out.println("NinjaSquare server up and running with Spring Boot!"); System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } } } 
  3. pom.xml删除“ webapp-runner ”依赖项,因为该库还有类org.apache.catalina.core.StandardContext ,它与嵌入式tomcat库中的类冲突。

      com.github.jsimone webapp-runner ${com.github.jsimone.version} provided  

    是的,删除这些行;)

  4. 运行应用程序然后,获利?

我在Spring bootembedded tomcat server遇到了完全相同的问题。

我是如何修理它的

经过几个小时的点击和试用运行并重新运行后,我发现我最初在我的项目中添加了本地tomcat服务器,这与Spring Boot提供的嵌入式tomcat服务器相冲突。 从项目构建路径中删除Tomcat服务器后,运行Spring Boot就像一个魅力。

只需右键单击该项目即可

 Build Path --> Configure Build Path --> Libraries(Tab) 

如果您错误地添加了一个,则删除Tomcat服务器运行时。 你现在应该好好去。

我发生了这个错误,因为我使用webapp原型创建了一个Maven项目。

将项目重新创建为一个简单的Maven项目解决了这个问题。

我收到错误是因为我将一些jar文件从tomcat的lib文件夹复制到了jdk的lib文件夹。所以它在类路径上有一个不兼容的Tomcat版本。 重新安装jdk后我解决了这个问题。

通过将Apache Tomcat版本9更改为Spring Boot 1.5不支持的V8.5,我解决了我的错误