【问题标题】:How to add TLD and Tag Lib files into a Maven's jar project如何将 TLD 和 Tag Lib 文件添加到 Maven 的 jar 项目中
【发布时间】:2011-04-13 01:31:07
【问题描述】:

我有一个打包为 jar 的 Maven 项目。

我还有一个打包为war 的Maven 项目。这个战争项目有一个 tld 文件和一些 xhtml 文件(标签库)。战争项目的结构(基本上)是:

pom.xml
src
    main
       java
           ...
       webapp
           WEB-INF
               my-facelets.taglib.xml
               facelets
                   aTag.xhtml
                   anotherTag.xhtml
           META-INF
               my-facelets.taglib.tld

然后出现了一个需求,将war项目中的那些xml、xhtml和tld文件移除,打包到jar项目中。所以我的第一次尝试是在 jar 项目的 POM 中添加:

<resources>
  <resource>
    <directory>src/main/tld</directory>
    <targetPath>META-INF</targetPath>
  </resource>

  <resource>
    <directory>src/main/taglib</directory>
    <targetPath>WEB-INF</targetPath>
  </resource>
</resources> 

当然,将文件放入src/main/tld(我想导出到META-INF)和src/main/taglib(我想导出到WEB-INF)。罐子是按照我的意愿创建的:

myjar
    com
        my
            classes
    WEB-INF

    META-INF
        my-facelets.taglib.tld
    WEB-INF
        ...

然后我将这个新 jar 作为 maven 依赖项添加到我的第一个 war 项目中。

问题在于 jar 的 META-INF、WEB-INF(jar 在 war 的 WEB-INF/lib 内)中的那些 .tld、.xhtml、.xml 文件无法识别。显然它们应该直接进入战争结构,除非执行了一些其他配置。这是必须的要求,因为多个war项目会使用jar项目的特性(类和taglibs)。

【问题讨论】:

  • 如果你把这些文件放在jar里,而不是放在WEB-INF或META-INF文件夹里,它会起作用吗?

标签: maven dependencies jsf-2 war taglib


【解决方案1】:

现在的做法是将TLD文件放入标签库JAR中,让类加载器找到它们。下载 Apache JSTL JAR,看看他们是如何做到的。我建议遵循该约定。它也将简化您的应用程序,因为您不必在 web.xml 文件中声明 TLD:只需将 JAR 放入您的 CLASSPATH 并确保 .jsp 中的 URI 与 TLD 中的匹配。

【讨论】:

  • 我也在考虑下载一些东西看看他们是怎么做的。我会检查并发布结果。
  • 它工作正常。无需在清单中声明任何内容。只需将所有文件插入 jar 的 META-INF 并让 maven 构建战争(其中的 jar 是 WEB-INF/lib)就可以了。错误是我的第二个 &lt;resource&gt; 元素的 &lt;targetPath&gt;
【解决方案2】:

@duffymo - 你的解决方案完全有效。在描述中添加图形。

创建一个生成 JAR 的 maven 项目。保持下面这样的结构

 src -- main
            |-- java
            |      `-- net
            |            `-- madhur
            |                 `-- helloTag.java
            `-- resources
                  `-- META-INF
                        `-- tags
                             `-- customTags.tld

在您的 customTags.tld 文件中添加类似这样的 uri

<uri>http://www.xyzabc.com/taglibs/customTags</uri>

访问 WAR 文件中的标签

战争应该有以下结构

  META-INF/
  META-INF/MANIFEST.MF
  WEB-INF/
  WEB-INF/classes/
  WEB-INF/lib/
  WEB-INF/lib/{tagLibrary}.jar
  WEB-INF/web.xml
  WEB-INF/customTags.tld

web.xml

    <jsp-config>
        <taglib>
            <taglib-uri>www.xyzabc.com/taglibs/customTags</taglib-uri>
            <taglib-location>/WEB-INF/customTags.tld</taglib-location>
        </taglib>
    </jsp-config>

在 FTL 或 JSP 文件中使用标签

Ftl:

<#assign ct = JspTaglibs["www.xyzabc.com/taglibs/customTags"]>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2013-11-24
    • 2018-11-21
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多