Spring启动异常:java.lang.NoSuchMethodError:StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V
我能够成功地为Spring Boot应用程序(Spring Boot gradle plugin:1.2.6.RELEASE)进行gradle构建,但当我尝试运行时,出现了以下异常。我相信也有人问过类似的问题,但我应该能够根据《入门指南》使用1.2.6.RELEASE运行Spring Boot- 有没有关于如何避免这个错误的想法 下面列出了我的Spring启动异常:java.lang.NoSuchMethodError:StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V,java,spring,tomcat,gradle,spring-boot,Java,Spring,Tomcat,Gradle,Spring Boot,我能够成功地为Spring Boot应用程序(Spring Boot gradle plugin:1.2.6.RELEASE)进行gradle构建,但当我尝试运行时,出现了以下异常。我相信也有人问过类似的问题,但我应该能够根据《入门指南》使用1.2.6.RELEASE运行Spring Boot- 有没有关于如何避免这个错误的想法 下面列出了我的build.gradle,后跟异常 buildscript { repositories { mavenCentral()
build.gradle
,后跟异常
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
mainClassName = "com.avada.base.Application"
sourceCompatibility = 1.8
targetCompatibility = 1.8
sourceSets {
main {
java {
srcDir 'src'
}
}
test {
java {
srcDir 'test'
}
}
}
jar {
baseName = 'IR360'
version = '6.0.0'
}
repositories {
mavenCentral()
}
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
dependencies {
compile ('org.springframework.boot:spring-boot-starter-web')
compile("org.springframework.boot:spring-boot-starter-actuator")
testCompile("junit:junit")
compile fileTree(dir: 'aux-lib', include: '*.jar')
compile fileTree(dir: 'common/lib', include: '*.jar')
compile fileTree(dir: 'WebContent/WEB-INF/lib', include: '*.jar')
}
task wrapper(type: Wrapper) {
gradleVersion = '2.7'
}
。\uuuuuuuuuuuu_
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
::弹簧靴::(v1.2.6.版本)
线程“main”org.springframework.context.ApplicationContextException中出现异常:无法启动嵌入式容器;嵌套的异常是java.lang.NoSuchMethodError:org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V
位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
位于org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:967)
位于org.springframework.boot.SpringApplication.run(SpringApplication.java:956)
位于com.avada.base.Application.main(Application.java:15)
原因:java.lang.NoSuchMethodError:org.apache.tomcat.util.scan.StandardJarScanner.setJarScanFilter(Lorg/apache/tomcat/JarScanFilter;)V
位于org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner$Tomcat8TldSkipSetter.setSkipPattern(SkipPatternJarScanner.java:106)
位于org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.setPatternToTomcat8SkipFilter(SkipPatternJarScanner.java:61)
位于org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.(SkipPatternJarScanner.java:56)
位于org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.apply(SkipPatternJarScanner.java:87)
位于org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:168)
位于org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.GetEmbeddedServletContainerFactory(TomcatEmbeddedServletContainerFactory.java:154)
位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
位于org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 还有7个
:运行失败
我可能找错了方向,但是,您是否有理由从GS指南中删除这部分gradle配置?(请注意排除语句):
从我所做的研究和过去看到的类似Spring错误来看,如果Spring在构建时以另一种方式通过Gradle包含tomcat lib(Maven脚本不需要这样做),那么缺少排除可能会覆盖它们,如果放入其中的lib版本不正确,您可能会遇到这样的错误 类路径上有一个旧的、不兼容的Tomcat版本。查看您的
build.gradle
,它一定来自您的fileTree
依赖项之一。您应该更新它们的配置,以确保类路径上唯一的Tomcat依赖项是那些由spring boot starter web
拉入的依赖项。如果您不确定旧的Tomcat类是从哪里加载的,那么运行带有-verbose:class
的应用程序会告诉您。您试过查看答案吗?@wero我将冒险探索运行的与正在编译的不同的路径,但是我使用了gradlebuild
然后java-jar
来运行它,所以我认为编译类和运行时类是一样的……我将深入研究它,然后confirm@CoryKlein是的-我希望在Spring Boot 1.2.6中实现这一点,而不是使用旧版本。我不相信你的问题包含了所有内容需要诊断问题。尝试包含一个重现问题的最小项目。是的-我发现当我做一个没有fileTree
依赖项的裸体项目时,我没有任何问题。我会把这些问题一个一个解决…谢谢。
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.2.6.RELEASE)
Exception in thread "main" 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)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:687)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:967)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:956)
at com.avada.base.Application.main(Application.java:15)
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)
at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.setPatternToTomcat8SkipFilter(SkipPatternJarScanner.java:61)
at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.<init>(SkipPatternJarScanner.java:56)
at org.springframework.boot.context.embedded.tomcat.SkipPatternJarScanner.apply(SkipPatternJarScanner.java:87)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:168)
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
:run FAILED
dependencies {
// tag::jetty[]
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}