maven2报cannot be cast to javax.servlet.Filter错误解决

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

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

  1. <project>  
  2. ...   
  3. <build>  
  4. <!-- To define the plugin version in your parent POM -->  
  5. <pluginManagement>  
  6. <plugins>  
  7. <plugin>  
  8. <groupId>org.codehaus.mojo</groupId>  
  9. <artifactId>tomcat-maven-plugin</artifactId>  
  10. <version>1.0-beta-1</version>  
  11. </plugin>  
  12. ...   
  13. </plugins>  
  14. </pluginManagement>  
  15. <!-- To use the plugin goals in your POM or parent POM -->  
  16. <plugins>  
  17. <plugin>  
  18. <groupId>org.codehaus.mojo</groupId>  
  19. <artifactId>tomcat-maven-plugin</artifactId>  
  20. <version>1.0-beta-1</version>  
  21. </plugin>  
  22. ...   
  23. </plugins>  
  24. </build>  
  25. ...   
  26. </project>  

运行mvn tomcat:run后,tomcat报错误如下:

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


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

  1. <dependency>  
  2.     <groupId>javax.servlet</groupId>  
  3.     <artifactId>servlet-api</artifactId>  
  4.     <version>2.4</version>  
  5. </dependency>  

但是tomcat里已经有servlet-api的包,而且版本可能会有不同,所以就会出现ClassCastException的问题


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

  1. <dependency>  
  2.             <groupId>javax.servlet</groupId>  
  3.             <artifactId>servlet-api</artifactId>  
  4.             <version>2.4</version>  
  5.             <scope>provided</scope>  
  6. </dependency>  

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

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

你可能感兴趣的:(maven2报cannot be cast to javax.servlet.Filter错误解决)