2011-04-13 61 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"]> 
相關問題