錯誤如下:
A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext
還有一種錯誤是:
org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer

可以嘗試以下方法:
1、可能引入的servlet版本太高了,比如3.1版本的與Tomcat7插件兼容,可以嘗試降級3.0.1。可以參照官方表格進行引入:http://tomcat.apache.org/whichversion.html
2、可能是web.xml的頭部版本太高了,可以嘗試修改成:****http://java.sun.com/xml/ns/javaee/" id="WebApp_ID" version="2.5"> ****或者2.4這樣的。
3、但是觀察上面報錯的原因,問題出現在:org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer,也就是servlet-api.jar包沖突了導致的。可以嘗試排除commons-logging.jar包,因為commons-logging中引入了2.3的servlet-api.jar。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
但這種方式不一定有效。
也就是圍繞包沖突的線索去找一下,參考依賴書去查看是否有沖突的包導致的。
4、嘗試把scope加上provided,也就是作用域改成編譯時使用,而打包不需要帶上:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
5、可以嘗試一下把POM上的servlet-api刪除,然后在Eclipse的Build Path中加入servlet-api,但這種治標不治本。
6、嘗試使用以下的servlet-api:
<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.76</version> <scope>provided</scope> </dependency>
7、經過測試,發覺同一份代碼在Mac上正常使用,而在Windows上卻出現這樣的錯誤,兩台電腦唯一不同的是JDK和Maven的版本,接下來嘗試將Windows上的Maven升級到最新版本。意外竟然啟動成功了。
由於使用的是Windows 10系統,可能JDK版本的問題導致的,先刪除舊版的JDK和Maven以及Maven本地倉庫,下載最新版本的JDK_1.8.0_131和Maven3.5。安裝配置路徑參考:http://www.cnblogs.com/EasonJim/p/6821717.html
