Как добавить файлы TLD и Tag Lib в проект Maven jar

У меня есть проект 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. Поэтому моя первая попытка заключалась в добавлении в проект 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
        ...

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

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

Ответ 1

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

Ответ 2

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