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

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

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

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <scope>provided</scope>
</dependency>

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


----------------------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的依赖:

<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.0.1</version>
   <scope>provided</scope>
</dependency>

自己pom.xml配置的servlet是

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>${servlet-api.version}</version> <!--引用2.5-->
    <scope>provided</scope>
</dependency>            
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>${jsp-api.version}</version>  <!--引用2.0-->
    <scope>provided</scope>
</dependency>

tomcat使用的是:

<groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <configuration>
    <path>/</path>
    <port>8080</port>
</configuration>

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

PHPz
PHPz

学习是最好的投资!

모든 응답(5)
伊谢尔伦

Servlet API 버전을 지정해 보세요.

으아악
伊谢尔伦

패키지 충돌이 있습니다. 참조된 다른 jar 패키지에 servlet-api가 있는지 확인하세요. servlet-api를 제거하려면 제외 태그를 사용하세요.

巴扎黑

Spring이 의존하는 서블릿 API 패키지가 Tomcat 7과 함께 제공되는 서블릿 Jar 패키지와 충돌해야 합니다.
서블릿 API에 의존하는 모든 pom을 제외하세요. 제외 태그를 사용할 수 있습니다.

左手右手慢动作

1. 다른 패키지와 충돌이 있을 수 있습니다
2. springboot를 사용하지 않는 것 같군요. 자체적으로 완전한 tomcat이 포함되어 있어 오류가 발생했던 것으로 기억합니다. 오류가 보고됩니다.

刘奇


패키지 충돌이 있는지 확인하세요. IntelliJ에 여기에 버튼이 있습니다(문제는 빨간색 선인 것 같습니다)
Baidu에서 자신을 Eclipse해야 합니다. 거의 동일합니다. 충돌이 있는 경우 제외를 시도하세요
여기에 귀하와 유사한 것이 있으며 <scope>제공</scope>도 있지만 제외는 여전히 필요합니다
http://powertech. iteye.com/bl..

아니면 servlet-api를 3.1.0으로 변경해 보세요. 링크에는 stackoverflow 버전 3.0.1에 문제가 있다고 설명되어 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿