严重:ContainerBase.addChild:start:org.apache.catalina.LifecycleException:无法启动错误

时间:2014-01-10 08:09:43

标签: java tomcat web.xml illegalstateexception

当我尝试在Tomcat中运行我的应用程序时遇到此错误。 我已经检查过tomcat和java home的版本。两者都使用java 6。

是否有丢失的罐子?或者是我的web xml?我没有使用任何maven工具。

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ICard]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: javax/xml/rpc/handler/soap/SOAPMessageContext
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2904)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getDeclaredMethods(Unknown Source)
    at org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:108)
    at org.apache.catalina.startup.WebAnnotationSet.loadMethodsAnnotation(WebAnnotationSet.java:279)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:141)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more
Caused by: java.lang.ClassNotFoundException: javax.xml.rpc.handler.soap.SOAPMessageContext
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 33 more
Jan 10, 2014 4:05:06 PM org.apache.catalina.startup.HostConfig deployDescriptor
SEVERE: Error deploying configuration descriptor F:\RCBC\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\conf\Catalina\localhost\ICard.xml
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ICard]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Jan 10, 2014 4:05:06 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8100"]
Jan 10, 2014 4:05:06 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jan 10, 2014 4:05:06 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4003 ms

19 个答案:

答案 0 :(得分:19)

得到了这个问题的解决方案....哇哇

  1. 确保Appliction服务器(Tomcat等)使用与您的Java应用程序所使用的相同的Java运行时版本。

  2. 确保您使用的jre路径不是运行时环境的jdk路径

  3. 确保在创建项目时选择适当的服务器运行时版本。

答案 1 :(得分:13)

出现此问题的原因各不相同。如果您使用的是Spring boot内置的war文件,则可能会遇到此问题。由于Spring引导web和休息启动项目jar确实嵌入了Tomcat,因此失败了“SEVERE:ContainerBase.addChild:start:org.apache.catalina.LifecycleException”。

您可以通过在maven的情况下使用exclusions在打包时排除嵌入式tomcat来解决此问题。

“spring-boot-starter-web”的Maven依赖关系看起来像

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

答案 2 :(得分:11)

据我所知,如果有两个相同名称但版本不同的违规类,则会发生这种情况。通常,它发生在servlet-api.jar中。 如果它存在于你的战争的lib文件夹中,那么请使用用于构建战争的任何工具将其删除。或者在maven的情况下,添加指定为“提供”的范围的依赖项。这将解决编译问题,在运行时它将引用服务器环境提供的jar。 请按如下方式配置依赖项:

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
</dependency>

答案 3 :(得分:2)

在我的情况下导致此错误的原因是在单个资源中有两个具有相同路径的@GET方法。改变其中一个方法的@Path为我解决了这个问题。

答案 4 :(得分:2)

主要原因:SOAPMessageContext NoClassDefFoundError 所以你需要导入这个Class或jar

在IDEA中

  1. ctrl + shift + alt + S ,“Libraries”,找到缺席的课程。
  2. 编辑本地Maven配置。
  3. .m2 / repository /你缺席的类(例如commons-logging)/.../ maven-metadata-central.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <metadata modelVersion="1.1.0">
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <versioning>
    <latest>1.2</latest>
    <release>1.2</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.0.2</version>
      <version>1.0.3</version>
      <version>1.0.4</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>1.1.2</version>
      <version>1.1.3</version>
      <version>1.2</version>
    </versions>
    <lastUpdated>20140709195742</lastUpdated>
    </versioning>
    </metadata>
    
    
    <latest>your need absend class version and useful</latest>
    

    因为Maven会找到元数据 - 中心文件&#39; config lastest version as project use version。

    原谅我的中文英语:)

答案 5 :(得分:2)

我的问题是我有@WebServlet("/route")和web.xml中声明的相同servlet

答案 6 :(得分:1)

在部署我的一个Portlet时,我遇到了类似的问题。该Portlet是为Windows上的Liferay 6.2开发的。我的运行时环境是在JRE 1.6(JRockit 1.6)上运行的Tomcat 7。我最近已迁移到Eclipse 2019-3。我检查了 Java构建路径(( Project-> Properties Libraries 标签))。我注意到在构建路径上的 JAR和类文件夹列表中指定的 Apache Tomcat unbound 。我选择了那个项目。我点击了 Edit 按钮。 服务器库对话框打开。我选择了正确的Apache Tomcat。应用更改后,我重新部署了portlet,问题得以解决。

有时,您可能需要从[Tomcat]/webapps目录中删除有问题的portlet,然后才能部署更正的portlet。此外,有时我已经体验到部署portlet所花费的时间比平时多,并且重新部署它可以解决问题。

答案 7 :(得分:0)

就我而言,

问题是由于应用程序 jar 未正确下载,更换该 jar 即可解决此问题。

答案 8 :(得分:0)

我的原因是在<variable name="basedir" value="${basedir}" /> <targets async="true"> <target name="fileAsync" xsi:type="File" keepFileOpen="true" encoding="iso-8859-2" concurrentWrites="false" layout="${date:format=yyyy-MM-dd, HH\:mm\:ss.fff} | [${threadid}] | ${level:uppercase=true}&#009;| ${message}." fileName="${var:basedir}/Log/log_${date:format=yyyy-MM-dd}.log" archiveFileName="${var:basedir}/Log/archive/${date:format=yyyy}/${date:format=MM}/${date:format=dd}/log_${date:format=yyyy-MM-dd_hh}.log" archiveEvery="Day" maxArchiveFiles="2048" enableFileDelete="true" archiveAboveSize="53248000" /> </targets> 中使用相同的库,但快照版本不同:

WEB-INF/lib

要解决此问题,请删除冗余副本。

答案 9 :(得分:0)

帮助我的是删除目标文件夹并再次重新编译项目。当我将第二台服务器用于需要运行服务器的测试时,出现了此问题。结论:对war文件进行较大更改时,请删除目标文件。

答案 10 :(得分:0)

使用spring boot时,问题是tomcat库需要设置为

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

答案 11 :(得分:0)

除了所有其他内容之外,对我而言,这是因为我在setenv.sh中激活了NewRelic:

NR_JAR=/opt/newrelic/newrelic.jar; export NR_JAR

一旦我评论这个,删除newrelic的钩子,问题就消失了。它只发生在使用apache CXF的端点上。

答案 12 :(得分:0)

在我的案例中(Spring MVC + Hibernate项目),我添加了Controller,Service,Dao,Model class&amp;百里香叶页。只是没有在“hibernate.cfg.xml”文件中映射新的模型类。这样就出现了这个错误。 但是在映射新模型类后再次得到了错误。 然后删除了Controller,Service,Dao,Model类。百里香叶页和新创建。还映射了新的模型类。然后错误就消失了。

答案 13 :(得分:0)

我的问题是@WebServelet注释,因为名称被重复,我错误地在我的代码中有两个@WebServlet("/route")(我复制并粘贴并忘记更改路径名称)

答案 14 :(得分:0)

在我的例子中,web.xml中定义的servlet名称与servlet映射标记中的sevlet名称不同。我已经纠正了这个问题并成功部署了WAR。

答案 15 :(得分:0)

我在&#34;无法访问资源&#34; 错误消息后面有相同的错误声明:

<强>命令

anchorName

<强>输出

#cat callflow-java-logger-1.log.0

在我的情况下,解决方案是更改连接器权限

Dec 09, 2015 8:09:03 AM org.apache.catalina.loader.WebappLoader startInternal
SEVERE: LifecycleException 
java.io.IOException: Failed to access resource /WEB-INF/lib/ojdbc14.jar

该文件最初未位于/ WEB-INF / lib,这可能是由于BIRT的工作原理。如果你处理更多的文件,这可能会很棘手。

答案 16 :(得分:0)

我不确定您的案例中发生的问题是什么,但您的问题就在这一行:

Caused by: java.lang.NoClassDefFoundError: javax/xml/rpc/handler/soap/SOAPMessageContext

您需要将jaxrpc-api.jar添加到/lib或添加

<dependency>
    <groupId>javax.xml</groupId>
    <artifactId>jaxrpc-api</artifactId>
    <version>x.x.x</version>
</dependency>

到您的maven依赖项。

答案 17 :(得分:0)

请验证您的.project和.classpath文件。验证java版本和其他需要的详细信息。如果那些与缺失或不匹配的

答案 18 :(得分:0)

奇怪的错误,你可以尝试james goooseling给出的方法,我也是通过以下方式完成的:

  • 从构建路径和lib文件夹中删除所有jar或库,并根据需要在lib文件夹或构建路径中再次添加它们。

  • 检查给定的servlet是否有servlet注释@WebServlet,以及它是否也在web.xml中有映射...这是最常见的错误,因为tomcat会混淆,哪个url模式必须他用了。