在maven2中使用tomcat plugin的时,报cannot be cast to javax.servlet.Filter的问题 - itVincent Blog

【关键词】maven tomcat plugin Filter
【问题描述】

在maven2中使用tomcat plugin启动web应用,在pom.xml中加入以下配置信息:

      
<project>
...
<build>
<!-- To define the plugin version in your parent POM -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-beta-1</version>
</plugin>
...
</plugins>
</pluginManagement>
<!-- To use the plugin goals in your POM or parent POM -->
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-beta-1</version>
</plugin>
...
</plugins>
</build>
...
</project>

运行mvn tomcat:run后,tomcat报

java.lang.ClassCastException: common.filter.CacheFilter cannot be cast to javax.servlet.Servlet 

 

【分析原因】 
由于CacheFilter实现了javax.servlet.Filter接口,Filter是在servlet-api.jar里,因此pom中有

         < dependency >
            
< groupId > javax.servlet </ groupId >
            
< artifactId > servlet-api </ artifactId >
            
< version > 2.4 </ version >
        
</ dependency >
但是tomcat里已经有servlet-api的包,而且版本可能会有不同,所以就会出现ClassCastException的问题


【解决办法】
servlet-api加入<scope>provided</scope>,如下:

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

这样修改后,servlet-api.jar就不会在运行tomcat时被import进去了,不会与tomcat自带的servlet-api有冲突

【避免此类问题的建议】
注意pom.xml中关于包的scope的定义,解决此类包冲突产生的问题



你可能感兴趣的:(在maven2中使用tomcat plugin的时,报cannot be cast to javax.servlet.Filter的问题 - itVincent Blog)