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时出错)。
也许这表明了一个更深层次的问题?
任何有关此问题的帮助将不胜感激。
谢谢!
我试图在我的本地电脑上运行你的代码,并且有一个类似于你所在地发生的错误。 而且,这些是我为消除这些错误所采取的步骤。
-
更新spring boot版本
org.springframework.boot spring-boot-starter-parent 1.1.12.RELEASE -
更新主类,因为
@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); } } }
-
从
pom.xml
删除“webapp-runner
”依赖项,因为该库还有类org.apache.catalina.core.StandardContext
,它与嵌入式tomcat库中的类冲突。com.github.jsimone webapp-runner ${com.github.jsimone.version} provided 是的,删除这些行;)
-
运行应用程序然后,获利?
我在Spring boot
和embedded 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,我解决了我的错误