如何将TLD和标签库文件添加到Maven的jar项目中
我有一个打包为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/tld
和src/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项目的功能(类和标签库)。
这些日子的做法是将TLD文件放入标记库JAR中并让类加载器找到它们。下载Apache JSTL JAR并查看它们是如何实现的。我建议遵循该惯例。它也将简化您的应用程序,因为您不必在web.xml文件中声明TLD:只需将JAR放入CLASSPATH中,并确保.jsp中的URI与TLD中的URI匹配。
@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"]>
请问如果你把这些文件放在罐子它的工作,但内部没有WEB- INF或META-INF文件夹? – Raghuram 2011-04-13 07:16:48
没有。相反。 – bluefoot 2011-04-13 11:07:29