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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值