Antの活用(ファイルセットの利用)JavaTips 〜Apache/Jakarta編

» 2004年10月27日 10時00分 公開
[青木淳夫@IT]

 Antの<copy>や<delete>といったタスクは、ファイルの集合に対して処理を行うことができますが、そのためには、これらのファイルを指定する仕組みを理解する必要があります。そこで本稿では簡単なサンプルを基に、ビルドファイルを設定する方法について紹介します。

サンプルについて

 今回のサンプルのフォルダ構成は下図のとおりです。

サンプル

 サンプルでは、「srcフォルダ配下のjavaファイルをすべてrelease_srcフォルダにコピーする。ただしTestクラスのファイルはコピーしない」という設定をビルドファイルに記述します。

build.xml
<target name="setup">
  <copy todir="release_src">
    <fileset dir="src"
      includes = "**/*.java"
      excludes = "**/*Test*"
    />
  </copy>
</target>


 条件に応じたファイルを指定するには、「パターン」と呼ばれる正規表現に似た記述を行い、「ファイルセット」と呼ばれるデータ型にてファイルの集合を設定します。

 ここでは“**/*.java”というパターンをコピー対象(include)、“**/*Test*”というパターンを除外対象(exclude)として条件を指定し、<fileset>タグにてファイルセットの設定をしています。

パターン

 対象とするファイルは“**/*.java”というように、“**”や“*”を用いて条件を指定します。

パターンの一覧
記号 意味
? 1個の任意の文字
* 0個以上の任意の文字
/ 1個の任意のディレクトリ
** 0個以上の任意のディレクトリ。パスの最後に指定された場合は、パス配下の全ディレクトリとファイル

 正規表現と似た考え方のため「*.java」が「拡張子=java」であることは理解しやすいと思います。これに対して「**」はAnt独自のパターンとなるため注意が必要です。「**」は0個以上の任意のディレクトリを意味しますので、「**/*.java」であれば、基底ディレクトリ(srcディレクトリ)のサブディレクトリにあるすべての「拡張子=java」ファイルが対象となります。

 なお、「src/」のようにパターンの最後が/で終わっている場合には、暗黙的に「**」が付加され「src/**」となりsrc配下のすべてのディレクトリとファイルが対象になることにも注意が必要です。

ファイルセット

 ファイルセットは<fileset>タグにて指定されるファイルの集合で、主にタスクの子要素として記述します。ファイルセットを宣言する際には、特定のディレクトリ(今回のサンプルではsrcフォルダ)を指定し、その基点ディレクトリを基に対象ファイルが指定されます。

ファイルセットの主要属性
属性名称 説明 必須
dir 基点となるディレクトリを指定
file 単一のファイルを指定
includes 対象となるファイルのパターン。カンマで区切られたリスト No
includesfile 対象となるパターンのファイル名。行単位で記述 No
excludes 除外となるファイルのパターン。カンマで区切られたリスト No
excludesfile 除外となるパターンのファイル名。行単位で記述 No
casesensitive 大文字/小文字を切り分けるか指定(デフォルトyes) No
defaultexcludes デフォルト除外パターンを無効(デフォルトyes) No
※どちらか1つが必須

 なお、<fileset>の子要素として<include><includesfile><exclude><excludesfile>の指定が可能です。そのためサンプルは下記のようにも書き換えることができます。

build.xml
<target name="setup">
  <copy todir="release_src">
    <fileset dir="src">
      <include name = "**/*.java" />
      <exclude name = "**/*Test*" />
    </fileset>
  </copy>
</target>


デフォルト除外集合

 CVSのソース管理にて使用されるCVSフォルダはcopyタスクではコピーされません。これはファイルセットにはデフォルトで除外するパターンが設定されており、CVSフォルダもその1つだからです。これらのデフォルト除外パターンはdefaultexcludes属性を“no”指定することで無効にできます。

デフォルト除外集合の一覧
パターン
**/*~
**/#*#
**/.#*
**/%*%
**/._*
**/CVS
**/CVS/**
**/.cvsignore
**/SCCS
**/SCCS/**
**/vssver.scc
**/.svn
**/.svn/**
**/.DS_Store

Profile

WINGSプロジェクト

青木淳夫


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。