5. セレクタ
セレクタはAnt1.5で新しく追加された機能です。これまでに説明したデータ構造は、どれもファイル名を基準にしてファイルの集合を定めるものでしたが、セレクタはファイル名以外の様々な条件によってファイルの集合を扱うことができます。
セレクタは通常ファイルセットの子要素として定義しますが、プロジェクトやターゲットの子要素しても定義することができます。そのときは<selector>要素として定義し、id属性とrefid属性を用いて利用したいところから参照します。
セレクタは、大きく分けて3つに分類されます。
- コアセレクタ
- セレクタコンテナ
- カスタムセレクタ
コアセレクタは単体として機能するセレクタで、あらかじめ用意されているものです。セレクタコンテナは、単体としては機能しないもので、他のセレクタの内包することによって利用します。カスタムセレクタは、ユーザが独自に実装するセレクタです。
5.1. コアセレクタ
コアセレクタは単体として機能するセレクタで、あらかじめAntに組み込まれてるものです。
コアセレクタには次のものがあります。
セレクタ | 説明 |
contains
|
テキストファイル内に含まれている文字列により条件を指定します。 |
date
|
ファイルの更新時間によって条件を指定します。 |
depend
|
他のファイルと比較して、更新時間が新しい場合に選択されます。 |
depth
|
ベースディレクトリからの階層の深さにより条件を指定します。 |
filename
|
ファイル名により条件を指定します。 |
present
|
比較対象の他のファイルが存在する場合に選択されます。 |
size
|
ファイルのサイズにより条件を指定します。 |
Contains
指定した文字列がファイルの内容に含まれているものを選択します。ファイル名ではなくファイルの中身を参照します。
属性 | 説明 | 初期値 | 必須 |
text
|
ファイルの内容に含まれているべき文字列を指定します。 |
●
|
|
casesensitive
|
検索の際に大文字小文字を区別するかどうかを指定します。 |
true
|
|
refid
|
事前定義したContainsセレクタを参照します |
Date
ファイルの更新時間が指定された条件に合うものを選択します。
属性 | 説明 | 初期値 | 必須 |
datetime
|
比較基準となる日時を指定します。 |
|
どちらか一つ
|
millis
|
比較基準となる時間を1970年からのミリ秒で指定します。 |
|
|
guranularity
|
基準時間との比較において許容する誤差をミリ秒で指定します。 |
0
|
|
when
|
基準となる時間に対して、更新時間がどのようなファイルを選択するかを指定します。 before - 基準時間より更新時間が古いものを選択します。 after - 基準時間より更新時間が新しいものを選択します。 equal - 基準時間と更新時間が等しいものを選択します。 |
equal
|
|
refid
|
事前定義したDateセレクタを参照します。 |
Depend
別の場所に存在するファイルより更新時間が新しければ選択されます。
属性 | 説明 | 初期値 | 必須 |
targetdir
|
比較対象ファイルのベースディレクトリを指定します。 |
|
●
|
guranularity
|
更新時間 |
0
(Windowsでは2000) |
|
refid
|
事前定義したDependセレクタを参照します。 |
|
|
更新時間の比較は、それぞれのファイルで異なるファイルが対象となります。デフォルトでは同じ名前のファイルが比較対象となります。
<fileset dir="{$src2}" includes="**/*.java"> <depend targetdir="{$src1}" /> </fileset>
この例は、${src2}ディレクトリ以下に存在するJavaソースファイルのうち、${src1}ディレクトリ以下の同じ相対位置に存在する同名のファイルより更新時間が新しいものが選択さされます。また${src1}ディレクトリ以下に同名のファイルが存在しないものも選択されます。たとえば{$src2}/Test.javaというファイルが存在したとき、{$src1}/Test.javaというファイルが存在しない、もしくは${src1}/Test.javaが存在しているが更新時間が古い場合に、{$src2}/Test.javaはdependセレクタに選択されます。
比較対象のファイルとして同名のものではなく、別のファイル名変換規則を適用したい場合はmapper子要素を定義します。
Depth
ベースディレクトリから比較したファイルの深さによってファイルを選択します。
属性 | 説明 | 初期値 | 必須 |
min
|
選択したいファイルの最小の深さを指定します。 |
|
少なくとも一つ
|
max
|
選択したいファイルの最大の深さを指定します。 |
|
|
refid
|
事前定義したDepthセレクタを参照します。 |
|
|
ベースディレクトリの深さは0とみなされます。次の例では、ベースディレクトリと同じディレクトリ、もしくは深さ1のディレクトリに存在するすべてのファイルが選択されます。例えば、{$src}/aや${src}/b/aは選択されますが、{$src]/c/b/aは深さ2なので選択されません。
<fileset dir="{$src}"> <depth max="1" /> </fileset>
Filename
ファイル名パターンによってファイルを選択します。name属性で指定したパターンにマッチしたファイルが選択されます。nagate属性をtrueにした場合は、逆にパターンにマッチしないファイルが選択されます。
属性 | 説明 | 初期値 | 必須 |
name
|
選択するファイル名のパターンを指定します。 |
|
●
|
casesensitive
|
検索の際に大文字小文字を区別するかどうかを指定します。 |
true
|
|
negate
|
検索条件を反転させます。「true」のときはパターンにマッチしないファイルが選択されます。 |
false
|
|
refid
|
事前定義したFilenemeセレクタを参照します。 |
|
|
Present
別の場所に比較対象のファイルが存在するものを選択します。
比較対象のファイルはDepthセレクタを同じ規則で選択されます。デフォルトは同名のファイルで、子要素としてMapperを定義することによって別の規則を適用することができます。
<fileset dir="{$src1}" includes="**/*.java"> <present targetdir="{$src2}" /> </fileset>
この例では{$src2}ディレクトリ以下に存在するJavaソースファイルで、{$src1}以下の同じ相対位置に同名のファイルが存在するものを選択します。例えば、${src2}/Test.javaが存在するとき、もし{$src1}/Test.javaが存在すれば${src2}/Test.javaは選択され、{$src2}/Test.javaが存在しないときは選択されません。
Size
ファイルのサイズによってファイルを選択します。
属性 | 説明 | 初期値 | 必須 |
value
|
比較の基準となるサイズを指定します。デフォルトの単位はバイトですが、units属性により単位を変えることができます。 |
|
●
|
units
|
value属性に記したファイルサイズの単位を指定します。 |
|
|
when
|
比較の方法を指定します。 |
equal
|
|
refid
|
事前定義したSizeセレクタを参照します。 |
|
|
基準となるファイルサイズはバイトです。unitsを指定しなければvalue属性に指定した値はバイトとみなされます。unitsで指定することのできる単位には以下のものがあります。
単位 | 説明 |
K, k, kilo, KILO
|
1,000 ( = 10の3乗) バイト |
Ki, KI, ki, kibi, KIBI |
1,024 ( = 2の10乗) バイト |
M, m mega MEGA
|
1,000,000 ( = 10の6乗) バイト |
Mi, MI, mi, mebi, MEBI
|
1,048,576 ( = 2の20乗) バイト |
G, g, giga, GIGA
|
1,000,000,000 ( = 10の9乗) バイト |
Gi, GI, gi, gibi, gibi
|
1,073,741,824 ( = 2の30乗) バイト |
T, t,tera, TERA
|
1,000,000,000,000 ( = 10の12乗) バイト |
Ti, TI, ti, tebi, TEBI
|
1,099,511,627,776 ( = 2の40乗) バイト |