カスタムタグを作るときに
カスタムタグを作るときに親のtldまでコピペするのは面倒。xdocletで使える定義されていないし。メンテナンスできないし。
なので、tldを抽出してxdocletのテンプレート(taglib_tld.xdt)に組み込める形式に変換するantを書いた。
taglib_tld.xdtに組み込めば親クラスを確認して親のtldを追加できる。はず
<?xml version="1.0" encoding="UTF-8" ?> <project name="antsample" default="test" basedir="."> <property name="web-inf.dir" value="src/main/webapp/WEB-INF" /> <property name="xdt" value="target/__taglib_tld.xdt" /> <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${web-inf.dir}/lib/ant-contrib-1.0b3.jar"/> <target name="test"> <mkdir dir="target/tld" /> <foreach target="extract-tld" param="jarfile" list="${web-inf.dir}/lib/struts-1.2.9.jar,${web-inf.dir}/lib/sa-struts-1.0.4-sp6.jar,${web-inf.dir}/lib/jstl-1.1.2.jar,${web-inf.dir}/lib/standard-1.1.2.jar" > </foreach> <path id="path.tld"> <fileset dir="target/tld" > <include name="**/*.tld"/> </fileset> </path> <foreach target="make-template" param="tldfile"> <path refid="path.tld" /> </foreach> <delete file="${xdt}" /> <concat append="yes" destfile="${xdt}" > <fileset dir="target/tld" > <include name="**/*.tld"/> </fileset> </concat> </target> <target name="extract-tld"> <unjar src="${jarfile}" dest="target/tld"> <patternset> <!-- これでいいのかなぁ。。。--> <include name="**/*.tld"/> <exclude name="**/*1.1.tld"/> <exclude name="**/*-1_0.tld"/> <exclude name="**/*-1_0-rt.tld"/> <exclude name="**/fn.tld"/> <exclude name="**/f.tld"/> <exclude name="**/c.tld"/> <exclude name="**/scriptfree.tld"/> <exclude name="**/permittedTaglibs.tld"/> </patternset> </unjar> </target> <target name="make-template"> <!-- remove header --> <replaceregexp file="${tldfile}" match="<\?.*</uri>" replace="" flags="ms" /> <!-- remove validator --> <replaceregexp file="${tldfile}" match="<validator>.*?</validator>" replace="" flags="msg" /> <!-- body-content --> <replaceregexp file="${tldfile}" match="<body-?content>.*?</body-?content>" replace="" flags="msg" /> <replaceregexp file="${tldfile}" match="<tag>.*?<tag-?class>" replace="<XDtType:ifIsOfType extent="superclass" type="" flags="msg" /> <replaceregexp file="${tldfile}" match="</tag-?class>" replace="">" flags="msg" /> <replaceregexp file="${tldfile}" match="</tag>" replace="</XDtType:ifIsOfType>" flags="msg" /> <!-- remove header --> <replaceregexp file="${tldfile}" match="</taglib>" replace="" flags="ms" /> </target> </project>