Как добавить файлы 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"]>