Tomcat启动异常:A child container failed during start 与 ClassNotFoundException: org.slf4j.Loggerl分析与解决方法
2018-01-09 15:07
716 查看
Tomcat启动异常:A child container failed during start 与 ClassNotFoundException:
org.slf4j.Logger 分析与解决方法
问题描述1:tomcat启动报错,A child container failed during start.
问题描述2:tomcat启动报错,java.lang.ClassNotFoundException: org.slf4j.Logger,包都在就是找不到…
背景前提:Eclipse环境下,当你导入一个maven项目后,发现在tomcat中运行报错,且jdk、tomcat都是配置正确。那出错的原因是什么呢?(报如下错误的一般都是maven项目)。
异常信息:
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:
Failed to start component [StandardEngine[Catalina].StandardHost[localhost].
StandardContext[/patyee]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
……
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/patyee]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
… 6 more
Caused by: java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
at java.lang.Class.getDeclaredFields(Class.java:1916)
……
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5405)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 6 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
… 20 more
七月 17, 2017 10:42:49 上午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to
start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.Futur
c646
eTask.get(FutureTask.java:192)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
……
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 6 more
七月 17, 2017 10:42:49 上午 org.apache.catalina.startup.Catalina start
严重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:689)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
……
分析:先检查项目的配置是否都正确.
一、【配置项目属性】项目右键—>properties
① 先检查Java Build Path
②检查Java Compiler
③检查Project Facets中的Java等级,与tomcat配置。
在搜索框中,搜索facet
二、【全局tomcat配置】Window —> Preferencs —> Server —>Runtime Environments
④检查tomcat配置
到此为止,如果你发现你上面的配置都是正确的(主要是jdk版本要一致,包括tomcat的jdk),但是还是报错,那是什么原因呢?
我们先来看一下报错的信息:
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/patyee]]
A child container failed during start 意思是说“启动一个子容器失败”。
那么这个子容器指的是什么?
其实这个子容器指的是你部署项目的tomcat,双击tomcat你会看见tomcat的配置。
Server Locations:(默认选择第一项Use workspace metadata(does not modidy Tomcat installation))就是我们部署项目用的tomcat的位置,它的本质是我们在本地安装的一个tomcat的一个副本(默认复制了本地的tomcat到Eclipse的工作空间的文件夹里来)。这里的配置不要改动,使用tomcat的副本进行项目部署,不会改变我们本地安装的tomcat的配置。可以单独在副本里进行各种修改。
——————————————-
普及一下tomcat在Eclipse中的配置知识:
(关于Eclipse中tomcat的配置,路径的选择的区别,我会再写一篇详细的文章。)
比如我本地tomcat安装在D盘:
D:\apache-tomcat-7.0.65
但是我们项目部署的地方,却不是在D盘,而是在Eclipse的工作空间中,
具体路径为:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core
这里面有很多tmp, 这些就是Eclipse自动为我们copy的一个tomcat副本。
我们点击tmp5进去看看:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5
再看看本地的tomcat:
D:\apache-tomcat-7.0.65
其实可以发现两个文件夹里的内容基本一样,其本质:tmp5就是D盘D:\apache-tomcat-7.0.65的一个副本,称之为“子容器”。
—————————————–
我们的项目就部署在这里:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5\wtpwebapps\patyee
jar包在这里:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5\wtpwebapps\patyee\WEB-INF\lib
这里面的jar包只有13个,全都是项目WEB-INF/lib目录下已有的。
启动子容器失败,指的就是启动tmp5这个tomcat容器失败。
然后报错信息中有一句:Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
说是找不到类,貌似是缺少slf4j的jar包。
哈哈,现在进入异常的解决方案:
我查看一下是否少了slf4j的jar包:
maven库中并没有少啊!
那是什么鬼呢??
实际上报这个错的,肯定是Eclipse+tomcat+maven项目,强调一遍,肯定是Maven项目。
解决方法如下:
项目右键 —> properties
Deployment Assembly设置【web部署部件】:
把maven库中的jar包添加到项目部署部件中。
至此问题解决!前面说那么多,主要为了“授之以渔”。不只是告诉你解决方案,而是告诉你怎么分析!
你在maven中管理jar包,但是你用tomcat运行项目时,maven本地库中的jar包并没有发布到tomcat容器中。所以你在项目的发布目录的WEB-INF/lib下,是找不到托管在maven中的jar包的。通过上面的Deployment Assembly设置后,启动tomcat,重新进入到tmp5中进行查看,WEB-INF/lib中已经包含了81个jar包,而这些jar包,除了那13个,其余的都是是我们在pom.xml,即maven中托管的jar包,现在已经全部发布到tomcat容器了,这样tomcat就正常启动了。
——————————————————
再普及一个知识:Eclipse的WebContent目录,或者MyEclipse的WebRoot目录就是项目发布输出的最终目录。当项目发布到tomcat后,WebContent 会更名为项目名,里面包含静态文件以及.java被编译成字节码的.class文件。
编译后的Java文件在这里,编译后.java文件全都变成字节码文件(.class)了。
希望对各位有所帮助!
—————————–补充一个其他网友遇到的相似的异常信息的解决方案—————————-
问题描述3:tomcat启动报错,报:A child
container failed during start ,并且异常息包含有 Caused by: java.lang.IllegalArgumentException:
Invalid <url-pattern> * in servlet mapping
原因:已经发布到tomcat上的某个项目的servlet过滤器配置错误。
如在web.xml下,将过滤规则定为“*”就是一种错误,需要更正为“/*”或者其他(但是必须要有“/”开头,表示当前项目),配置为:<url-pattern>/*</url-pattern> 。
该异常主要是你的web.xml中过滤的规则配置出错了,与我上面的那个异常不同。
希望对各位有所帮助!
———————
转自http://blog.csdn.net/chenchunlin526/article/details/75229006
org.slf4j.Logger 分析与解决方法
问题描述1:tomcat启动报错,A child container failed during start.
问题描述2:tomcat启动报错,java.lang.ClassNotFoundException: org.slf4j.Logger,包都在就是找不到…
背景前提:Eclipse环境下,当你导入一个maven项目后,发现在tomcat中运行报错,且jdk、tomcat都是配置正确。那出错的原因是什么呢?(报如下错误的一般都是maven项目)。
异常信息:
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:
Failed to start component [StandardEngine[Catalina].StandardHost[localhost].
StandardContext[/patyee]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
……
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/patyee]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
… 6 more
Caused by: java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
at java.lang.Class.getDeclaredFields(Class.java:1916)
……
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5405)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 6 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
… 20 more
七月 17, 2017 10:42:49 上午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to
start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.Futur
c646
eTask.get(FutureTask.java:192)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
……
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 6 more
七月 17, 2017 10:42:49 上午 org.apache.catalina.startup.Catalina start
严重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:689)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
……
分析:先检查项目的配置是否都正确.
一、【配置项目属性】项目右键—>properties
① 先检查Java Build Path
②检查Java Compiler
③检查Project Facets中的Java等级,与tomcat配置。
在搜索框中,搜索facet
二、【全局tomcat配置】Window —> Preferencs —> Server —>Runtime Environments
④检查tomcat配置
到此为止,如果你发现你上面的配置都是正确的(主要是jdk版本要一致,包括tomcat的jdk),但是还是报错,那是什么原因呢?
我们先来看一下报错的信息:
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component
[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/patyee]]
A child container failed during start 意思是说“启动一个子容器失败”。
那么这个子容器指的是什么?
其实这个子容器指的是你部署项目的tomcat,双击tomcat你会看见tomcat的配置。
Server Locations:(默认选择第一项Use workspace metadata(does not modidy Tomcat installation))就是我们部署项目用的tomcat的位置,它的本质是我们在本地安装的一个tomcat的一个副本(默认复制了本地的tomcat到Eclipse的工作空间的文件夹里来)。这里的配置不要改动,使用tomcat的副本进行项目部署,不会改变我们本地安装的tomcat的配置。可以单独在副本里进行各种修改。
——————————————-
普及一下tomcat在Eclipse中的配置知识:
(关于Eclipse中tomcat的配置,路径的选择的区别,我会再写一篇详细的文章。)
比如我本地tomcat安装在D盘:
D:\apache-tomcat-7.0.65
但是我们项目部署的地方,却不是在D盘,而是在Eclipse的工作空间中,
具体路径为:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core
这里面有很多tmp, 这些就是Eclipse自动为我们copy的一个tomcat副本。
我们点击tmp5进去看看:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5
再看看本地的tomcat:
D:\apache-tomcat-7.0.65
其实可以发现两个文件夹里的内容基本一样,其本质:tmp5就是D盘D:\apache-tomcat-7.0.65的一个副本,称之为“子容器”。
—————————————–
我们的项目就部署在这里:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5\wtpwebapps\patyee
jar包在这里:
D:\Workspaces\eclipse_luna\.metadata\.plugins\org.eclipse.wst.server.core\tmp5\wtpwebapps\patyee\WEB-INF\lib
这里面的jar包只有13个,全都是项目WEB-INF/lib目录下已有的。
启动子容器失败,指的就是启动tmp5这个tomcat容器失败。
然后报错信息中有一句:Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
说是找不到类,貌似是缺少slf4j的jar包。
哈哈,现在进入异常的解决方案:
我查看一下是否少了slf4j的jar包:
maven库中并没有少啊!
那是什么鬼呢??
实际上报这个错的,肯定是Eclipse+tomcat+maven项目,强调一遍,肯定是Maven项目。
解决方法如下:
项目右键 —> properties
Deployment Assembly设置【web部署部件】:
把maven库中的jar包添加到项目部署部件中。
至此问题解决!前面说那么多,主要为了“授之以渔”。不只是告诉你解决方案,而是告诉你怎么分析!
你在maven中管理jar包,但是你用tomcat运行项目时,maven本地库中的jar包并没有发布到tomcat容器中。所以你在项目的发布目录的WEB-INF/lib下,是找不到托管在maven中的jar包的。通过上面的Deployment Assembly设置后,启动tomcat,重新进入到tmp5中进行查看,WEB-INF/lib中已经包含了81个jar包,而这些jar包,除了那13个,其余的都是是我们在pom.xml,即maven中托管的jar包,现在已经全部发布到tomcat容器了,这样tomcat就正常启动了。
——————————————————
再普及一个知识:Eclipse的WebContent目录,或者MyEclipse的WebRoot目录就是项目发布输出的最终目录。当项目发布到tomcat后,WebContent 会更名为项目名,里面包含静态文件以及.java被编译成字节码的.class文件。
编译后的Java文件在这里,编译后.java文件全都变成字节码文件(.class)了。
希望对各位有所帮助!
—————————–补充一个其他网友遇到的相似的异常信息的解决方案—————————-
问题描述3:tomcat启动报错,报:A child
container failed during start ,并且异常息包含有 Caused by: java.lang.IllegalArgumentException:
Invalid <url-pattern> * in servlet mapping
原因:已经发布到tomcat上的某个项目的servlet过滤器配置错误。
如在web.xml下,将过滤规则定为“*”就是一种错误,需要更正为“/*”或者其他(但是必须要有“/”开头,表示当前项目),配置为:<url-pattern>/*</url-pattern> 。
该异常主要是你的web.xml中过滤的规则配置出错了,与我上面的那个异常不同。
希望对各位有所帮助!
———————
转自http://blog.csdn.net/chenchunlin526/article/details/75229006
相关文章推荐
- Tomcat启动异常:A child container failed during start 与 ClassNotFoundException: org.slf4j.Loggerl分析与解决方法
- A child container failed during start,Caused by: java.lang.ClassNotFoundException
- 在eclipse下用java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource定义data-source Tomcat无法启动的解决方法
- 在Tomcat中启动项目是出现java.lang.ClassNotFoundException: org.springframework.web的错误解决方式
- 《Springboot极简教程》问题解决:org.apache.catalina.LifecycleException: A child container failed during start
- Maven使用tomcat7-maven-plugin插件run时出现错误: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component
- Tomcat 启动报java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 异常
- maven项目启动报:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 错误解决方法-杜恩德
- POI操作excel2007 出现异常 java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 解决方法
- spring boot 启动报A child container failed during start java.util.concurrent.ExecutionException: org.ap
- A child container failed during start java.lang.ClassCastException: org.springframework.web.SpringSe
- myeclipse 使用weblogic10启动hibernate项目时出现ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常的解决办法
- spring集成quartz中java.lang.ClassNotFoundException: org.quartz.impl.JobDetailImpl异常解决方法
- maven工程发布到tomcat下启动报ClassNotFoundException的异常的解决办法
- ClassNotFoundException: org.hibernate.hql.ast.HqlToken 解决方法与原因
- java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrderedMap解决方法
- 关于Tomcat启动出现java.lang.ClassNotFoundException异常的解决方案
- 关于Eclipse启动时报ClassNotFoundException: javax.xml.parsers.SAXParserFactory异常的解决
- Rational Rose 2003 启动提示 java.lang.ClassNotFoundException 的解决方法
- Caused by: org.apache.catalina.LifecycleException: A child container failed during start