読者です 読者をやめる 読者になる 読者になる

カスタムタグを作るときに

カスタムタグを作るときに親の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="&lt;\?.*&lt;/uri&gt;"
      replace=""
      flags="ms" />
    <!-- remove validator -->
    <replaceregexp file="${tldfile}"
      match="&lt;validator&gt;.*?&lt;/validator&gt;"
      replace=""
      flags="msg" />
    <!-- body-content -->
    <replaceregexp file="${tldfile}"
      match="&lt;body-?content&gt;.*?&lt;/body-?content&gt;"
      replace=""
      flags="msg" />
    <replaceregexp file="${tldfile}"
      match="&lt;tag&gt;.*?&lt;tag-?class&gt;"
      replace="&lt;XDtType:ifIsOfType extent=&quot;superclass&quot; type=&quot;"
      flags="msg" />
    <replaceregexp file="${tldfile}"
      match="&lt;/tag-?class&gt;"
      replace="&quot;&gt;"
      flags="msg" />
    <replaceregexp file="${tldfile}"
      match="&lt;/tag&gt;"
      replace="&lt;/XDtType:ifIsOfType&gt;"
      flags="msg" />

    <!-- remove header -->
    <replaceregexp file="${tldfile}"
      match="&lt;/taglib&gt;"
      replace=""
      flags="ms" />
  </target>
</project>