java - 修复 maven JSTL 1.2.1 依赖项,因此 maven-war-plugin 不会打包冒犯 Tomcat 7 的 JAR

标签 java maven jstl war

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

我有一个带有这个 JSTL 的动态 Web 项目依赖:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>1.2.1</version>
</dependency>

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

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 检查依赖关系得到这个:

[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 中范围,但是如果我检查 pom.xmlorg.glassfish.web:javax.servlet.jsp.jstl:jar:1.2.1我看到了这个:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.2</version>
  <scope>provided</scope>
</dependency>

provided 上显示它们范围,我认为这会将它们排除在包装之外。

问题:

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

最佳答案

弄明白了,jsp-api 作为 jSTL 的传递依赖潜入了 WEB-INF\lib,解决方法是像这样排除。

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>${javax.jstl.version}</version>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
        <exclusion>
            <artifactId>jsp-api</artifactId>
            <groupId>javax.servlet.jsp</groupId>
        </exclusion>
    </exclusions>
</dependency>

关于java - 修复 maven JSTL 1.2.1 依赖项,因此 maven-war-plugin 不会打包冒犯 Tomcat 7 的 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288896/

相关文章:

java - 如何在 jsp 中访问 ModelMap?

java - JSP页面无法从资源文件夹获取Bootstrap文件-IntelliJ

java - getCipherSuite() 返回 SSL_NULL_WITH_NULL_NULL

java - 哪种 Java API 数据结构适合 HTML 树?

java - 在 Java 中向 Actor 发送 PoisonPill

java - 在 pom.xml 中指定换行符

Maven 登录输出文件和控制台

java - JScrollPane 边框重叠在 JTable 边框上

maven - 定义MapReduce项目和Oozie工作流程的依赖关系

tomcat - 将 JSTL 1.1 升级到 1.2 失败,出现 java.lang.AbstractMethodError : javax. servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext