【问题标题】:org.apache.catalina.core.ContainerBase : A child container failed during startorg.apache.catalina.core.ContainerBase :子容器在启动过程中失败
【发布时间】:2017-12-24 20:13:24
【问题描述】:

我的问题看起来和其他人一样,但我尝试了其他解决方案,但没有任何效果,所以我放在这里,我使用的是 spring boot,需要集成谷歌驱动器来下载文件,以下三个依赖项需要根据谷歌文档添加。

    compile 'com.google.api-client:google-api-client:1.23.0'
    //compile 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
    compile 'com.google.apis:google-api-services-drive:v3-rev94-1.23.0'

我的应用程序和谷歌示例都可以独立工作,但是当我在我的项目build.gradle 中包含上述依赖项时,注释掉的依赖项会导致以下异常并且应用程序无法启动。

2017-12-25 01:09:26.593[0;39m [32m INFO[0;39m [35m12741[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36ms.b.c.e.t.TomcatEmbeddedServletContainer[0;39m [2m:[0;39m Tomcat initialized with port(s): 8088 (http)
[2m2017-12-25 01:09:26.639[0;39m [32m INFO[0;39m [35m12741[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mo.apache.catalina.core.StandardService  [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2017-12-25 01:09:26.641[0;39m [32m INFO[0;39m [35m12741[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36morg.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet Engine: Apache Tomcat/8.5.16
[2m2017-12-25 01:09:26.871[0;39m [31mERROR[0;39m [35m12741[0;39m [2m---[0;39m [2m[cat-startStop-1][0;39m [36morg.apache.catalina.core.ContainerBase  [0;39m [2m:[0;39m A child container failed during start

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122) [na:1.8.0_151]
    at java.util.concurrent.FutureTask.get(FutureTask.java:192) [na:1.8.0_151]
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939) ~[tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_151]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_151]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_151]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.16.jar:8.5.16]
    ... 6 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [Pipeline[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5117) ~[tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.16.jar:8.5.16]
    ... 6 common frames omitted
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.authenticator.NonLoginAuthenticator[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) [tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:182) ~[tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.16.jar:8.5.16]
    ... 8 common frames omitted
Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
    at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1141) ~[tomcat-embed-core-8.5.16.jar:8.5.16]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.16.jar:8.5.16]
    ... 10 common frames omitted

我正在使用 STS 使用 tomcat 容器,那么 tomcat 和 jetty 有什么乱七八糟的地方吗???

【问题讨论】:

  • 您是否查看了依赖关系树以确定是否存在任何冲突的包或 com.google.oauth-client:google-oauth-client-jetty 是否覆盖了任何内容?
  • Tomcat 8.5 支持 servlet 规范 3.1,因此应该存在 javax.servlet.ServletContext.getVirtualServerName。如果您以某种方式将 servlet-api.jar 文件替换为来自 servlet 规范的早期版本的文件,您可能会收到此类错误。
  • @ChristopherSchultz 谢谢先生,我实际上没有添加,但码头依赖添加,所以我的问题通过添加 servlet3.1.0 版本到我的 gradle 来解决,
  • @SeanCarroll 是的,我检查了树并且没有任何覆盖我的意思是唯一的 servlet-api2.0 存在并且来自码头,我也尝试了传递依赖设置 false,但没有运气
  • 我使用 spring boot 1.5.9 (tomcat 8.5.23) 创建了一个示例项目,并添加了列出的 3 个依赖项,我能够成功启动应用程序。我看到的jetty(6.1.26)的servlet-api版本是2.5

标签: java spring tomcat google-drive-api jetty


【解决方案1】:

我通过 SO 的帮助尝试了几个解决方案

  • 为码头添加传递依赖项 false(即 造成麻烦)但没有任何反应
  • 尝试使用 servlet api 3.0.1 但没有成功

可行的解决方案是将 servlet api 3.1.0 添加到我的build.gradle

【讨论】:

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