Antの<copy>や<delete>といったタスクは、ファイルの集合に対して処理を行うことができますが、そのためには、これらのファイルを指定する仕組みを理解する必要があります。そこで本稿では簡単なサンプルを基に、ビルドファイルを設定する方法について紹介します。
サンプルについて
今回のサンプルのフォルダ構成は下図のとおりです。
サンプルでは、「srcフォルダ配下のjavaファイルをすべてrelease_srcフォルダにコピーする。ただしTestクラスのファイルはコピーしない」という設定をビルドファイルに記述します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
条件に応じたファイルを指定するには、「パターン」と呼ばれる正規表現に似た記述を行い、「ファイルセット」と呼ばれるデータ型にてファイルの集合を設定します。
ここでは“**/*.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>の指定が可能です。そのためサンプルは下記のようにも書き換えることができます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
デフォルト除外集合
CVSのソース管理にて使用されるCVSフォルダはcopyタスクではコピーされません。これはファイルセットにはデフォルトで除外するパターンが設定されており、CVSフォルダもその1つだからです。これらのデフォルト除外パターンはdefaultexcludes属性を“no”指定することで無効にできます。
パターン | |
---|---|
**/*~ | |
**/#*# | |
**/.#* | |
**/%*% | |
**/._* | |
**/CVS | |
**/CVS/** | |
**/.cvsignore | |
**/SCCS | |
**/SCCS/** | |
**/vssver.scc | |
**/.svn | |
**/.svn/** | |
**/.DS_Store |
Copyright © ITmedia, Inc. All Rights Reserved.