java - 关于maven tomcat启动错误
问题描述
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包也还是如此,所以该如何是好呢?(╥╯^╰╥)
问题解答
回答1:指定下 Servlet API 的版本试试看:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope></dependency><dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope></dependency>回答2:
包冲突了,查看下其他引用的jar包中是否有servlet-api,用exclusion标签去掉servlet-api
回答3:应该是 spring 依赖的 servlet api 包跟 tomcat 7 自带的 servlet jar 包冲突了吧。把有依赖到 servlet api 的pom 都排除掉。可以用 exclusion标签。
回答4:1.有可能是与其他的包中有冲突2.我猜你应该用的不是springboot吧,如果是springboot,它本身是包含完整的tomcat的,所以会报错.记得不错貌似是会报错的.
回答5:你看看是不是有包冲突,intellij是在这里有个按钮(有问题的好像是红色的线)eclipse自己百度下,应该差不多,如果有冲突尝试exclusion排除掉这里有个和你类似的,也是<scope>provided</scope>,但是还是需要exclusionhttp://powertech.iteye.com/bl...
或者把servlet-api换成3.1.0的试试 链接描述stackoverflow上有3.0.1这个版本也出现问题的
相关文章:
1. docker不显示端口映射呢?2. dockerfile - [docker build image失败- npm install]3. docker内创建jenkins访问另一个容器下的服务器问题4. docker 17.03 怎么配置 registry mirror ?5. javascript - jquery怎么给select option一个点击时触发的事件,如图 如果选择自定义触发一个时间?6. docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????7. mac连接阿里云docker集群,已经卡了2天了,求问?8. 微信开放平台 - Android上使用微信Oauth, 返回ERR_BAN是什麽意思?9. css - 安卓内嵌H5,padding边距上下不一致10. 请教各位大佬,浏览器点 提交实例为什么没有反应
![dockerfile - [docker build image失败- npm install]](http://www.haobala.com/attached/image/news/202311/1028105a80.png)