大家使用maven的时候,经常会遇到依赖重复的问题。比如velocity1.6.4依赖commons-lang2.4,commons-configuaration1.2 也依赖commons-lang但是版本是2.1。这样就会用两个commons-lang的jar。一般情况下也不会有什么问题,但是如果要是依赖多个servlet-api。在容器启动的时候,就会报错,比如spring 的过滤器加载的时候:


java.lang.ClassCastException: org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4001)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4651)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)


所以就需要去除,重复的依赖。在eclipse中maven插件中,可以看到依赖重复的位置。打开pom文件,点击Dependency Hierarchy标签




打开pom文件,在依赖中,加入exclusion标签


		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity-tools</artifactId>
			<version>${velocity.tools.version}</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>


 dependency:tree 就可以了,如果没有使用eclipse的maven插件的话,可以使用maven的dependency插件,查看依赖树,找到重复的依赖。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐