遇错:
今天遇到一个Bug:A child container failed during start
中文翻译为:子容器在启动期间失败
事情是这样的,一开始我在做案例的时候使用的tomcat是本地集成的,项目能正常运行;
后来我将tomcat的本地集成换成了Maven中的Tomcat插件来部署项项目:
org.apache.tomcat.maven tomcat7-maven-plugin 2.2
使用tomcat插件启动项目:
控制台直接报:A child container failed during start
错误分析:
首先要查看一遍自己所写的各种配置文件(pom,web,springMVC ,application,mybatis-config等xml文件)中,是否存在多余的配置;
1、在这里我原先使用本地的tomcat是可以启动项目的,所以应该不是配置的问题;
2、那么是tomcat缓存的问题?
3、清理tomcat缓存之后发现还是报错,
4、查看依赖的包:发现导入的servlet-api坐标存在问题
javax.servlet javax.servlet-api 4.0.1
解决问题:
前面说到依赖的坐标出了问题,出来什么问题呢?
原因很简单,在我们内置的tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错;外置的tomcat在打包的时候不会打进来,所以就不会报错;
解决方法也很简单:给servlet-api坐标添加作用范围就可以了
javax.servlet javax.servlet-api 4.0.1 provided