我将项目从maven
转换为gradle
在启动我的tomcat服务器时进行转换后,我收到以下错误日志。
严重:子容器在启动时失败 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [卡塔利娜] .StandardHost [本地主机] .StandardContext [/ Tabserve-超级管理员]] 在java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1120) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1572) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1562) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)引起: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [卡塔利娜] .StandardHost [本地主机] .StandardContext [/ Tabserve-超级管理员]] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) ... 6更多引起:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava /郎/字符串; 在 org.apache.tomcat.websocket.server.WsServerContainer。(WsServerContainer.java:147) 在org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5573) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ......还有6个
2016年11月1日下午2:37:10 org.apache.catalina.core.ContainerBase startInternal SEVERE:启动时子容器失败 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [Catalina] .StandardHost [localhost]] at java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1120) 在 org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在 org.apache.catalina.core.StandardService.startInternal(StandardService.java:444) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在 org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:756) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在org.apache.catalina.startup.Catalina.start(Catalina.java:693)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)at at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)导致 by:org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine [Catalina] .StandardHost [localhost]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1572) 在 org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1562) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:745)引起: org.apache.catalina.LifecycleException:子容器失败 在开始时 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1128) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ......还有6个
2016年11月1日下午2:37:10 org.apache.catalina.startup.Catalina开始 严重:所需的服务器组件无法启动,因此Tomcat是 无法开始。 org.apache.catalina.LifecycleException:失败 启动组件[StandardServer [8005]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 在org.apache.catalina.startup.Catalina.start(Catalina.java:693)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)at at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)导致 by:org.apache.catalina.LifecycleException:无法启动组件 [StandardService [Catalina]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 在 org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:756) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ... 7更多引起:org.apache.catalina.LifecycleException:失败 启动组件[StandardEngine [Catalina]] org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 在 org.apache.catalina.core.StandardService.startInternal(StandardService.java:444) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ... 9更多引起:org.apache.catalina.LifecycleException:一个孩子 容器在启动时失败 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1128) 在 org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) ......还有11个
这些是我的依赖
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'
war {
baseName = 'MyApp'
version = '0.0.1'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'lib')
compile project(':Model_v102')
compile("org.springframework:spring-core:3.1.0.RELEASE")
compile("org.springframework:spring-context-support:3.1.0.RELEASE")
compile("org.springframework:spring-beans:3.1.0.RELEASE")
compile("org.springframework:spring-context:3.1.0.RELEASE")
compile("org.springframework:spring-tx:3.1.0.RELEASE")
compile("org.springframework:spring-jdbc:3.1.0.RELEASE")
compile("org.springframework:spring-orm:3.1.0.RELEASE")
compile("org.springframework:spring-web:3.1.0.RELEASE")
compile("org.springframework:spring-jms:3.1.0.RELEASE")
compile("dom4j:dom4j:1.1")
compile("cglib:cglib:2.1_3")
compile("com.google.code.gson:gson:1.7.1")
compile("org.projectlombok:lombok:1.12.4")
compile("org.apache.commons:commons-io:1.3.2")
compile("commons-fileupload:commons-fileupload:1.2.2")
compile('commons-codec:commons-codec:1.7')
compile("org.jasypt:jasypt:1.7.1")
compile("net.sf.ehcache:ehcache-core:2.5.2")
compile("commons-lang:commons-lang:2.6")
compile("org.slf4j:slf4j-api:1.6.1")
compile("javassist:javassist:3.12.0.GA")
compile("com.sun.faces:jsf-api:2.1.7")
compile("com.sun.faces:jsf-impl:2.1.7")
compile("javax:javaee-api:6.0")
compile("org.hibernate:hibernate-validator:4.3.0.Final")
compile("org.hibernate:hibernate-core:3.5.1-Final")
compile("org.hibernate:hibernate-annotations:3.5.1-Final")
compile("mysql:mysql-connector-java:5.1.15")
compile("org.primefaces:primefaces:3.5")
compile("joda-time:joda-time:2.1")
compile("c3p0:c3p0:0.9.1.1")
//compile("javax.servlet:jstl:1.2")
compile("com.caucho:resin-hessian:4.0.1")
compile("org.apache.poi:poi:3.7")
compile("com.itextpdf:itextpdf:5.0.6")
compile("net.sf.jasperreports:jasperreports:6.1.0")
compile("org.quartz-scheduler:quartz:2.1.1")
compile("log4j:log4j:1.2.15")
//providedCompile("org.apache.tomcat:tomcat-catalina:7.0.29")
testCompile("junit:junit")
}
答案 0 :(得分:2)
根本原因是:
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String
Servlet 3.1中添加了此方法。您确定要部署到正确的Tomcat版本吗?
答案 1 :(得分:1)
正如@chkal所说,看起来servlet-api
的不同版本在类路径上。尝试从命令行
mvn dependency:tree
(来自旧版maven)
gradle dependencies
(来自gradle构建)
我猜测servlet-api
版本在maven vs gradle build中有所不同。 Maven将使用“最接近定义获胜”策略来解析工件的多个版本,而gradle将使用最新版本。请注意,您可以customise the way that gradle resolves dependencies。