【问题标题】:Tomcat - A child container failed during start - After converting maven to gradleTomcat - 启动期间子容器失败 - 将 maven 转换为 gradle 后
【发布时间】:2016-11-01 09:22:24
【问题描述】:

我将我的项目从 maven 转换为 gradle
在启动我的 tomcat 服务器时进行转换后,我收到以下错误日志。

严重:子容器在启动期间失败 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Tabserve-Superadmin]] 在 java.util.concurrent.FutureTask.report(FutureTask.java:122) 在 java.util.concurrent.FutureTask.get(FutureTask.java:192) 在 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) 在 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[Catalina].StandardHost[localhost].StandardContext[/Tabserve-Superadmin]] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) ... 6 更多原因:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; 在 org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:147) 在 org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) 在 org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47) 在 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]] 在 java.util.concurrent.FutureTask.report(FutureTask.java:122) 在 java.util.concurrent.FutureTask.get(FutureTask.java:192) 在 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428) 引起 作者:org.apache.catalina.LifecycleException:无法启动组件 [StandardEngine[Catalina].StandardHost[localhost]] 在 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) 在 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]] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:693) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428) 引起 作者:org.apache.catalina.LifecycleException:无法启动组件 [标准服务 [Catalina]] 在 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: A child 容器在启动期间失败 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")
}

【问题讨论】:

    标签: spring maven tomcat gradle


    【解决方案1】:

    根本原因是:

    java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String
    

    此方法已在 Servlet 3.1 中添加。您确定要部署到正确的 Tomcat 版本吗?

    【讨论】:

      【解决方案2】:

      正如@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

      【讨论】:

        猜你喜欢
        • 2014-05-30
        • 2014-01-14
        • 2012-05-09
        • 2018-08-05
        • 2014-01-17
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多