2011-04-13 40 views
10

我有一个打包为jar的Maven项目。如何将TLD和标签库文件添加到Maven的jar项目中

我还有一个Maven项目,打包为war。这个战争项目有一个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 

然后出现了一个要求从战争项目中删除那些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/tldsrc/main/taglib(那些(我想导出到META-INF的那些)我想导出到WEB-INF )。和广口瓶中创建如我所愿:

myjar 
    com 
     my 
      classes 
    WEB-INF 

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

然后我加入这个新罐子给我的第一战项目,作为Maven的依赖。

问题在于,那些位于jar的META-INF,WEB-INF(jar包含在war的内部WEB-INF/lib中)的.tld,.xhtml,.xml文件无法识别。显然他们应该直接进入战争结构,除非进行其他配置。这是必须具备的要求,因为多个战争项目将使用jar项目的功能(类和标签库)。

+0

请问如果你把这些文件放在罐子它的工作,但内部没有WEB- INF或META-INF文件夹? – Raghuram 2011-04-13 07:16:48

+0

没有。相反。 – bluefoot 2011-04-13 11:07:29

回答

10

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

+0

我也在考虑下载内容,看它们是如何做的。我会检查出来并发布结果。 – bluefoot 2011-04-13 11:06:47

+1

它工作正常。无需向清单申报任何内容。只需在jar的'META-INF'中插入所有文件,然后让maven构建这个war(使用jar文件在'WEB-INF/lib'中)就可以实现。错误是我的第二个''元素的''。 – bluefoot 2011-04-14 01:49:34

5

@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"]> 
相关问题