maven插件tomcat7:run执行时遇到了一个问题

我在pom.xml中配置的tomcat7插件是这样的:


				org.apache.tomcat.maven
				tomcat7-maven-plugin
				2.2
				
					8080
					/
					UTF-8
					tomcat7
				
			


在eclipse中执行:clean tomcat7:run



报错了:

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"

上网查资料查到了原来是jar包冲突导致的,冲突的jar包是servlet-api-2.3.jar,于是总结除了三个解决方案:

1、该jar包是velocity-tools-2.0引用的包,而maven的tomcat7插件也有这个包,将在pom.xml文件引用velocity-tools-2.0的时候讲servlet-api-2.3.jar包exclude之后就解决了这个问题。

2、改为本地tomcat运行,此时会有这么一条提示信息:

十一月 30, 2016 3:32:04 下午 org.apache.catalina.loader.WebappClassLoader validateJarFile
信息: validateJarFile(D:\apache-tomcat-7.0.52\wtpwebapps\redshop-web\WEB-INF\lib\servlet-api-2.3.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class



由此可以看到,利用本地tomcat运行时会有一个validateJarFile方法校验,该方法会过滤掉后加载的相同jar包,所以可以解决上述问题。

3、在pom.xml文件中添加:


			javax.servlet
			servlet-api
			2.5
			provided
		


在eclipse中执行:clean tomcat7:run,运行成功。
注意scope配置的是provided,maven根据间接依赖路径最短优先会先加载这个引用的依赖,maven发现scope是provided的,所以再运行的时候不会加载这个jar包,也就不会有冲突了


你可能感兴趣的:(maven)