JDK1.8+Tomcat8.0 +Eclipse+SSM+Maven
主要报错如下:
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/atcrowdfunding02-admin-webui]]
...
aused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/atcrowdfunding02-admin-webui]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
... 6 more
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
at java.lang.Class.getDeclaredFields0(Native Method)
...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1335)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1163)
... 20 more
十二月 07, 2020 10:09:25 下午 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]]
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
由于是新手刚学,上来就复制报错日志进行百度,尝试了大家的方法发现没用(包括重启eclipse,重装tomcat,关闭8080端口netstat -ano | findstr 8080、taskkill -pid 进程pid -f),就差重装eclipse了。
无意间看了下日志,才发现日志真是好东西,解决办法就在日志中呀。
分析日志:
-
主要原因是一个子容器启动失败,不用猜,肯定是spring的IOC 引起的
-
造成这个的原因是因为一个类没有找到引起的空指针异常:
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log,这个类不就是spring的依赖jar包嘛,这个包没有我是知道的,因为我的pom.xml有如下设置:<!-- Spring 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <exclusions> <!-- 不使用适用默认日志,使用slf4j+logback替换 --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 加入 slf4j+logback --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> -
以上配置仅去掉了spring的依赖日志包
commons-logging,加入了slf4j+logback所需要的jar包,而spring却不知道该怎么使用后者,所以需要加入如下转换jar包,来告诉spring怎么使用logback日志。<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency>新手这个框架搭了快一整天,感觉不是在搭框架,是在产BUG=-=-=-=-=-=反正日志是个好东西,以后要常看日志了
在JDK1.8、Tomcat8.0、Eclipse、SSM和Maven环境下,遇到启动异常'A child container failed during start'。错误源于Spring的IOC导致的空指针异常,原因是缺少某个类。分析日志后发现是由于移除了spring的日志依赖,但未正确配置slf4j和logback。解决方案是添加转换jar包,指导Spring使用logback日志。
536

被折叠的 条评论
为什么被折叠?



