`
林风丝雨
  • 浏览: 26435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.lang.ClassCastException: net.paoding.rose.RoseFilter cannot be cast to java

 
阅读更多

在使用Rose框架进行web开发,并采用maven的tomcat插件的时候,会遇到下面这个问题

java.lang.ClassCastException: net.paoding.rose.RoseFilter cannot be cast to javax.servlet.Filter

产生这个问题的原因肯能是加载了两个Filter,由于类加载器不同而导致的

 

带着这个疑问去看了一下tomcat6-maven-plugin和paoding-rose两个工程的maven依赖,

发现他们都依赖了servlet-api包,而且两个包的scope都设置成了运行时可用——

tomcat6-maven-plugin为runtime,paoding-rose为compile。

 

找到了问题的根源,接着就需要解决这个问题。简单来说去掉一个servlet-api就行了,

tomcat6-maven-plugin的无法改变,就只好拿paoding-rose来开刀了,最简单的办法就是将

paoding-rose对servlet-api的依赖去掉,这个工作可以通过exclusions元素来实现。

但是项目在编译和测试阶段还是需要servlet-api包的,因此还要在另外加上对servlet-api

的依赖,不同的是,这个依赖的scope要选择provided。

 

最终的pom.xml文件如下所示:

 

<dependencies>   
    <dependency>
	    <groupId>net.paoding</groupId>
	    <artifactId>paoding-rose</artifactId>
	    <version>1.0-SNAPSHOT</version>
            <exclusions>
	    	<exclusion>
	    		<groupId>javax.servlet</groupId>
	    		<artifactId>servlet-api</artifactId>
	    	</exclusion>
	    </exclusions>
    </dependency>    
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>servlet-api</artifactId>
    	<version>2.3</version>
    	<scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
     <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-compiler-plugin</artifactId>
    		<configuration>
    			<source>1.5</source>
    			<target>1.5</target>
    		</configuration>
    	</plugin>
    	
    	<plugin>
    		<groupId>org.apache.tomcat.maven</groupId>
    		<artifactId>tomcat6-maven-plugin</artifactId>
    		<version>2.0</version>
    		<configuration>
    			<port>8080</port>
    			<path>/</path>
    			<uriEncoding>utf-8</uriEncoding>
    		</configuration> 
    	</plugin>
    </plugins>
  </build>

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics