JSTL版本1.2声明但是从Maven Repository发送了1.1

时间:2011-06-30 12:58:49

标签: java maven-2 jstl

我正在寻找一种从Maven存储库中获取JSTL 1.2实现JAR的简单方法,这听起来很简单但实际上证明是非常困难的。

我尝试了以下套餐:

javax.servlet : jstl : 1.2
通过http://repo1.maven.org/maven2/javax/servlet/jstl/1.2/jstl-1.2.jar

javax.servlet.jsp.jstl : jstl : 1.2
通过http://download.java.net/maven/1/javax.servlet.jsp.jstl/jars/jstl-1.2.jar

这两个工件都应该包含JSTL 1.2实现。但是,当我下载JAR并在其中一个JAR中打开文件/META-INF/c.tld时(其内容相同),标题显示:

<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

  <description>JSTL 1.1 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>http://java.sun.com/jsp/jstl/core</uri>
  ...

这意味着标签不是1.2而是1.1标签。为了进行比较,当我直接从http://download.java.net/maven/glassfish/org/glassfish/web/jstl-impl/1.2/jstl-impl-1.2.jar下载JAR文件时,c.tld文件看起来是正确的:

  ...
  <description>JSTL 1.2 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.2</tlib-version>
  <short-name>c</short-name>
  <uri>http://java.sun.com/jsp/jstl/core</uri>
  ...

所以,问题是:为什么Maven存储库包含错误版本(1.1而不是1.2)的JAR(或更具体地说是tld声明)以及如何通过Maven获取正确的JSTL版本?

2 个答案:

答案 0 :(得分:2)

  1. https://issues.sonatype.org/browse/MVNCENTRAL

  2. 报告问题
  3. 作为短期修复,请使用java.net中的正确JAR替换本地.m2 repo中的JAR文件。

    如果你使用代理,也可以在那里替换它。

答案 1 :(得分:1)

您可以按照以下步骤在本地覆盖它:

  1. 在.m2目录*中,复制并粘贴1.1文件夹的新副本。
  2. 将副本重命名为1.2
  3. 将真正的1.2 jar复制到该文件夹​​。
  4. 更新那里的POM和其他文本文件以反映它是1.2
  5. 的事实 所有平台上的<$> * $ HOME / .m2。