2012年2月5日日曜日

Ant でファイル(ワイルドカード指定)の存在をチェックするタスクを書く

Ant タスクで、ワイルドカード指定してファイルの存在チェックを行いたくなった。
Ant 1.7 以降なら、以下の方法で実現可能である。(ファイルは UTF-8 で保存すること)

【build.xml】
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject" default="main" basedir=".">

  <!-- 検索対象ディレクトリを設定 -->
  <property name="src" location="src"/>

  <!-- 最初に呼び出される。init および caution を事前に呼び出す -->
  <target name="main" depends="init, caution" />

  <!-- 指定ファイルが存在したら、"caution"プロパティをセットする -->
  <target name="init">
    <!-- 条件を満たしたら、"caution" プロパティがセットされる -->
    <condition property="caution">
      <!-- リソース数をカウントし、0件より多かったら true となる -->
      <resourcecount when="greater" count="0">
        <!-- src 以下全ディレクトリの"Abstract*.java"ファイルをカウント対象とする -->
        <fileset dir="${src}" includes="**/Abstract*.java" />
      </resourcecount>
    </condition>
  </target>

  <!-- "caution"プロパティが設定されている場合、実行される -->
  <target name="caution" if="caution">
    <fileset id="files" dir="${src}" includes="**/Abstract*.java" />
    <pathconvert pathsep="${line.separator}" property="filelist" refid="files" />
    <fail message="以下の Abstract ファイルが含まれています${line.separator}${filelist}" />
  </target>

</project>