Как добавить файлы TLD и Tag Lib в проект Maven's jar - PullRequest
11 голосов
/ 13 апреля 2011

У меня есть проект Maven, который упакован как jar.

И у меня также есть проект Maven, который упакован как 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

И затем появилось требование удалить эти файлы xml, xhtml и tld из военного проекта и упаковать их в проект jar.Поэтому моей первой попыткой было добавить в POM проекта jar:

<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
        ...

А потом я добавил эту новую банку в свой первый военный проект, как зависимость maven.

Проблема в том, что этиФайлы .xhtml, .xml, которые находятся внутри META-INF банки, WEB-INF (банка находится внутри войны WEB-INF/lib), не распознаются.По-видимому, они должны находиться непосредственно в структуре войны, если не выполняется какая-либо другая конфигурация.Это обязательное требование, потому что несколько военных проектов будут использовать функции (классы и метки) проекта jar.

Ответы [ 2 ]

10 голосов
/ 13 апреля 2011

Практика в наши дни - поместить файлы TLD в JAR библиотеки тегов и позволить загрузчику классов их найти.Загрузите JAR-файлы Apache JSTL и посмотрите, как они это делают.Я бы рекомендовал следовать этой конвенции.Это также упростит ваше приложение, поскольку вам не нужно будет объявлять TLD в своем файле web.xml: просто вставьте JAR в ваш CLASSPATH и убедитесь, что URI в вашем .jsp совпадает с URI в TLD.*

5 голосов
/ 04 июня 2013

@ duffymo - Ваше решение полностью работает.Добавление графики к вашему описанию.

Создайте проект maven, который генерирует JAR.сохраняйте структуру, подобную приведенной ниже,

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