问题 如何将TLD和Tag Lib文件添加到Maven的jar项目中


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

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

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添加到我的第一个war项目中,作为maven依赖。

问题是那些在jar的META-INF,WEB-INF里面的.tld,.xhtml,.xml文件(jar在war里面 WEB-INF/lib)不被承认。显然他们应该直接进入战争结构,除非执行其他一些配置。这是必须要求的,因为多个war项目将使用jar项目的功能(类和taglib)。


10451
2018-04-13 01:31


起源

如果将这些文件放在jar中,但不在WEB-INF或META-INF文件夹中,它是否有效? - Raghuram
没有。相反的。 - bluefoot


答案:


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


10
2018-04-13 01:34



我也在考虑下载一些东西,看看他们是怎么做的。我会检查出来并发布结果。 - bluefoot
它工作正常。无需向Manifest声明任何内容。只需在jar中插入所有文件即可 META-INF 让maven建立战争(里面有罐子 WEB-INF/lib做了伎俩。错误是 <targetPath> 我的第二个 <resource> 元件。 - bluefoot


@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"]>

5
2018-06-04 08:15