修复maven JSTL 1.2.1依赖关系,以便maven-war-plugin不会打包冒犯Tomcat 7的JAR

我的设置:jdk 7,Tomcat 7.0.29 ,, Eclipse Juno(m2e [嵌入Maven 3.0.4],m2eclipse-wtp)

我有一个动态Web项目与此JSTL依赖项:

 org.glassfish.web javax.servlet.jsp.jstl 1.2.1  

当我在Tomcat上进行mvn package和部署时,我会在日志中收到这些非致命消息,这些消息不会阻止我的应用程序部署:

 validateJarFile(...\WEB-INF\lib\jsp-api-2.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class validateJarFile(...\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 

我检查并且是的,有问题的JAR被打包在WAR中。 我用mvn dependency:tree检查依赖mvn dependency:tree并得到这个:

 [INFO] \- org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1:compile [INFO] \- javax.servlet.jsp.jstl:jstl-api:jar:1.2:compile [INFO] +- javax.servlet:servlet-api:jar:2.5:compile [INFO] \- javax.servlet.jsp:jsp-api:jar:2.1:compile 

两个JAR都在compile范围内显示,但如果我检查org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1上的pom.xml org.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1我看到这个:

  javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.2 provided  

这显示了他们provided范围,我认为这将从包装中排除它们。

问题:

  1. 如何告诉WAR插件不包含这些JAR? 不会删除它,因为这也会将它们从构建路径中删除。
  2. 如果我想针对Servlet 3.0规范进行开发但保留此JSTL版本该怎么办?

想通了,jsp-api潜入了WEB-INF \ lib作为jstl的转换依赖,修复是这样排除的。

  org.glassfish.web javax.servlet.jsp.jstl ${javax.jstl.version}   javax.servlet servlet-api   jsp-api javax.servlet.jsp    

对于1.2.1版,请使用 :

   javax.servlet.jsp.jstl javax.servlet.jsp.jstl-api 1.2.1   org.glassfish.web javax.servlet.jsp.jstl 1.2.1    jstl-api javax.servlet.jsp.jstl    

因为如果不是,jstl-api 1.2将作为依赖项添加。 jstl-api添加了jsp-api和servlet-api依赖项。