Maven使用tomcat7-maven-plugin插件run时出现错误: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component

错误如下:

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

 

posted @ 2017-05-29 11:14  EasonJim  阅读(27174)  评论(0编辑  收藏  举报