java - 关于maven tomcat启动错误
PHPz
PHPz 2017-04-18 10:50:15
0
5
731

maven(命令为 clean tomcat7:run)启动tomcat提示错误:
org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer

自己认为是版本冲突问题,但是不知道怎么解决。
查了下,有人说是pom.xml中servlet jar包部分的应该设为provided,但自己确实是这么配置的。
下面是pom.xml部分内容:

 javax.servlet servlet-api provided   javax.servlet jsp-api provided 

各位有谁遇到过或者对此有个人见解,麻烦给予点拨,谢谢!


----------------------Update-------------------------
排错能力实在有限,还是没能解决问题。
贴一下比较完整的信息吧:

  • 这是启动时的错误信息:

Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1670) at org.apache.catalina.startup.ContextConfig.getServletContainerInitializers(ContextConfig.java:1652) at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1562) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more

根据以上信息我猜测是tomcat本身的api和springframework.web包有冲突(spring版本4.2.4.RELEASE)
spring-web含有一个javax.servlet-api的依赖:

 javax.servlet javax.servlet-api 3.0.1 provided 

自己pom.xml配置的servlet是

 javax.servlet servlet-api ${servlet-api.version}  provided   javax.servlet jsp-api ${jsp-api.version}  provided 

tomcat使用的是:

org.apache.tomcat.maven tomcat7-maven-plugin  / 8080 

本来想换tomcat8试试的,但是好像也没有tomcat8-maven-plugin
试过不包含其它jar包也还是如此,所以该如何是好呢?(╥╯^╰╥)

PHPz
PHPz

学习是最好的投资!

全部回覆 (5)
伊谢尔伦

指定下 Servlet API 的版本試試看:

 javax.servlet javax.servlet-api 3.1.0 provided   javax.servlet jsp-api 2.0 provided 
    伊谢尔伦

    套件衝突了,查看下其他引用的jar包中是否有servlet-api,用exclusion標籤去掉servlet-api

      巴扎黑

      應該是 spring 依賴的 servlet api 包跟 tomcat 7 自帶的 servlet jar 包衝突了吧。
      把有依賴到 servlet api 的pom 都排除掉。可以用 exclusion標籤。

        左手右手慢动作

        1.有可能是與其他的包中有衝突
        2.我猜你應該用的不是springboot吧,如果是springboot,它本身是包含完整的tomcat的,所以會報錯.記得不錯貌似是會報錯的.

          刘奇


          你看看是不是有包衝突,intellij是在這裡有個按鈕(有問題的好像是紅色的線)
          eclipse自己百度下,應該差不多,如果有衝突嘗試exclusion排除掉
          這裡有個跟你類似的,也是 provided ,但還是需要exclusion
          http://powertech.iteye.com/bl...

          或把servlet-api換成3.1.0的試試 連結描述stackoverflow上有3.0.1這個版本也出現問題的

            最新下載
            更多>
            網站特效
            網站源碼
            網站素材
            前端模板
            關於我們 免責聲明 Sitemap
            PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!