セレクターは、<fileset> を構成するファイルを、<include> および <exclude> タグによって提供されるファイル名以外の基準に基づいて選択するためのメカニズムです。
セレクターは FileSet の要素であり、その中に記述します。また、<selector> タグを使用してターゲットの外で定義し、参照として使用することもできます。
セレクターはそれぞれ異なる属性を持っています。一部のセレクターは他のセレクターを含むことができ、これらは セレクターコンテナ
と呼ばれます。また、カスタムセレクター
と呼ばれる、ユーザー定義の拡張を可能にするセレクターのカテゴリもあります。Apache Ant に組み込まれているものは コアセレクター
と呼ばれます。
コアセレクターは、Ant に標準で付属しているものです。これらは fileset 内で使用でき、セレクターコンテナ内に含めることができます。
コアセレクターは以下のとおりです。
<contains> — 特定のテキスト文字列を含むファイルを選択します<date> — 特定の日時より前または後に変更されたファイルを選択します<depend> — 他の場所にある同等のファイルよりも最近変更されたファイルを選択します<depth> — ディレクトリツリーの指定された深さにあるファイルを選択します<different> — 他の場所にあるファイルとは異なるファイルを選択します<filename> — 名前が特定のパターンに一致するファイルを選択します。patternset の include および exclude 要素と同等です。<present> — 他の場所に存在するか、または存在しないファイルを選択します<containsregexp> — 正規表現に一致するファイルを選択します<size> — 特定のバイト数よりも大きいまたは小さいファイルを選択します<type> — 通常のファイルまたはディレクトリであるファイルを選択します<modified> — 設定されたアルゴリズムの戻り値がキャッシュに保存された値と異なる場合にファイルを選択します<signedselector> — ファイルが署名されている場合、およびオプションで特定の名前の署名がある場合にファイルを選択します<scriptselector> — BSF または JSR 223 スクリプト言語を使用して独自のセレクターを作成します<readable> — ファイルが読み取り可能である場合にファイルを選択します<writable> — ファイルが書き込み可能である場合にファイルを選択します<executable> — ファイルが実行可能である場合にファイルを選択します<symlink> — ファイルがシンボリックリンクである場合にファイルを選択します<ownedBy> — ファイルが指定されたユーザーによって所有されている場合にファイルを選択します<posixGroup> — ファイルが指定された POSIX グループを持っている場合にファイルを選択します<posixPermissions> — ファイルが指定された POSIX パーミッションを持っている場合にファイルを選択しますFileSet 内の <contains> タグは、fileset で定義されたファイルを、text 属性で指定された文字列を含むもののみに制限します。
<contains> セレクターは ResourceSelector として使用できます(<restrict> ResourceCollection を参照してください)。
| 属性 | 説明 | 必須 |
|---|---|---|
| text | すべてのファイルに含まれている必要があるテキストを指定します | はい |
| casesensitive | text 属性の文字列を検索するときに、大文字と小文字を区別するかどうか。 | いいえ。デフォルトは trueです |
| ignorewhitespace | text 属性の文字列をチェックする前に、空白を削除するかどうか。 | いいえ。デフォルトは falseです |
| encoding | 選択されるリソースのエンコーディング。Ant 1.9.0 以降 | いいえ。デフォルトはデフォルトの JVM 文字エンコーディングです |
Contains セレクターの使用例を次に示します
<fileset dir="${doc.path}" includes="**/*.html">
<contains text="script" casesensitive="no"/>
</fileset>
文字列 script を含むすべての HTML ファイルを選択します。
FileSet 内の <date> タグは、include タグで指定されたファイルに制限を設け、セレクターで指定された日付制限を満たさない最終変更日のタグは選択されません。
| 属性 | 説明 | 必須 |
|---|---|---|
| datetime | テストする日時を指定します。pattern 属性で指定された代替パターンを使用する場合を除き、米国ロケールを使用して MM/dd/yyyy hh:mm a形式にする必要があります。 |
少なくとも 2 つのうち 1 つ |
| millis | テストする必要のある 1970 年からのミリ秒数。datetime 属性を使用する方がはるかに簡単です。 | |
| when | 日付を解釈する方法、選択されるファイルの最終変更時刻が指定された値より前、後、または等しいかどうかを示します。この属性で使用できる値は次のとおりです。
|
いいえ。デフォルトは equalです |
| granularity | ファイルの変更時刻を比較するときに使用するミリ秒単位の猶予時間。すべてのファイルシステムが最終変更時刻をミリ秒レベルまで追跡できるわけではないため、これが必要です。 | いいえ。デフォルトは 0 ミリ秒、または DOS システムでは 2 秒です |
| pattern | 現在のロケールを使用して datetime 属性を解釈するときに使用する SimpleDateFormat 互換のパターン。Ant 1.6.2 以降 |
いいえ |
| checkdirs | ディレクトリの日付をチェックするかどうかを示します。 | いいえ。デフォルトは falseです |
Date セレクターの使用例を次に示します
<fileset dir="${jar.path}" includes="**/*.jar">
<date datetime="01/01/2001 12:00 AM" when="before"/>
</fileset>
2001 年 1 月 1 日の午前 0 時より前に最後に変更されたすべての JAR ファイルを選択します。
<depend> タグは、最終変更日が別の場所にある同等のファイルよりも新しいファイルを選択します。
<depend> タグは、比較対象のファイルの場所を定義するために、含まれる <mapper> 要素の使用をサポートしています。<mapper> 要素が指定されていない場合は、identity 型マッパーが使用されます。
<depend> セレクターは大文字と小文字を区別します。
| 属性 | 説明 | 必須 |
|---|---|---|
| targetdir | 比較対象のファイルを検索する基本ディレクトリ。正確な場所は、この属性と <mapper> 要素(存在する場合)の組み合わせによって異なります。 |
はい |
| granularity | ファイルが古くなっていると判断する前に猶予を与えるミリ秒数。すべてのファイルシステムが最終変更時刻をミリ秒レベルまで追跡できるわけではないため、これが必要です。 | いいえ。デフォルトは 0 ミリ秒、または DOS システムでは 2 秒です |
Depend セレクターの使用例を次に示します
<fileset dir="${ant.1.5}/src/main" includes="**/*.java">
<depend targetdir="${ant.1.4.1}/src/main"/>
</fileset>
1.5 リリースで変更されたすべての Java ソースファイルを選択します。
<depth> タグは、fileset のベースディレクトリからのディレクトリレベルの深さに基づいてファイルを選択します。
| 属性 | 説明 | 必須 |
|---|---|---|
| min | ファイルが選択されるために、ベースディレクトリより下にある必要のあるディレクトリレベルの最小数。 | 少なくとも 2 つのうち 1 つ。デフォルトは制限なし |
| max | ファイルが選択されるために、ベースディレクトリより下にあることができるディレクトリレベルの最大数。 |
Depth セレクターの使用例を次に示します
<fileset dir="${doc.path}" includes="**/*">
<depth max="1"/>
</fileset>
ベースディレクトリと、その下の 1 つのディレクトリにあるすべてのファイルを選択します。
<different> セレクターは、別の場所にある同等のファイルと「異なる」と見なされた場合にファイルを選択します。2 つのファイル間の差異を判断する規則は次のとおりです
offに設定されている場合、ファイルのタイムスタンプが異なると、ファイルは異なると見なされます。
trueに設定されていない限り、2 つのファイルに対してバイト単位のチェックが実行されます。
これは、依存関係チェックを適切に処理しないプログラムやタスクを扱う場合に役立つセレクターです。前のタスクが常に出力ファイルを作成する場合でも、フォローアップタスクは別のセレクターで作成されたコピーから実行できるため、それらの依存関係は、単なるタイムスタンプではなく、ファイルの絶対状態に基づいて実行されます。例:Web サイトからフェッチしたもの、または一部のプログラムの出力。チェックの量を減らすために、このタスクを <copy> タスク内で使用する場合は、preservelastmodified を true
に設定して、ソースファイルから宛先ファイルにタイムスタンプを伝播します。
<different> セレクターは、比較対象のファイルの場所を定義するために、含まれる <mapper> 要素の使用をサポートしています。<mapper> 要素が指定されていない場合は、identity 型マッパーが使用されます。
| 属性 | 説明 | 必須 |
|---|---|---|
| targetdir | 比較対象のファイルを検索する基本ディレクトリ。正確な場所は、この属性と <mapper> 要素(存在する場合)の組み合わせによって異なります。 |
はい |
| ignoreFileTimes | 比較でファイル時刻を使用するかどうか。 | いいえ。デフォルトは trueです(時刻の差異は無視されます) |
| ignoreContents | バイト単位の比較を実行するかどうか。Ant 1.6.3 以降 | いいえ。デフォルトは falseです(コンテンツが比較されます) |
| granularity | ファイルが古くなっていると判断する前に猶予を与えるミリ秒数。すべてのファイルシステムが最終変更時刻をミリ秒レベルまで追跡できるわけではないため、これが必要です。 | いいえ。デフォルトは 0 ミリ秒、または DOS システムでは 2 秒です |
Different セレクターの使用例を次に示します
<fileset dir="${ant.1.5}/src/main" includes="**/*.java">
<different targetdir="${ant.1.4.1}/src/main"
ignoreFileTimes="true"/>
</fileset>
1.4.1 リリースと 1.5 リリースの間のすべての Java ソースファイルを比較し、ファイル時刻を無視して、異なるものを選択します。
<filename> タグは、fileset 内の <include> および <exclude> タグのように機能します。ただし、セレクターを使用することで、任意の セレクターコンテナを使用して、他のすべてのセレクターと組み合わせることができます。
<filename> セレクターは大文字と小文字を区別します。
| 属性 | 説明 | 必須 |
|---|---|---|
| name | 選択するファイルの名前。name パラメーターには、標準の Ant ワイルドカード文字を含めることができます。 | 2 つのうちいずれか一方 |
| regex | 選択するファイルに一致する正規表現。 | |
| casesensitive | ファイル名を調べるときに大文字と小文字を区別するかどうか。 | いいえ。デフォルトは trueです |
| negate | このファイル名選択の効果を反転して、include タグではなく exclude タグをエミュレートするかどうか。 |
いいえ。デフォルトは falseです |
Filename セレクターの使用例を次に示します
<fileset dir="${doc.path}" includes="**/*">
<filename name="**/*.css"/>
</fileset>
すべてのカスケードスタイルシートファイルを選択します。
<present> タグは、別のディレクトリツリーに同等のファイルがあるファイルを選択します。
<present> タグは、テスト対象のファイルの場所を定義するために、含まれる <mapper> 要素の使用をサポートしています。<mapper> 要素が指定されていない場合は、identity 型マッパーが使用されます。
<present> セレクターは大文字と小文字を区別します。
| 属性 | 説明 | 必須 |
|---|---|---|
| targetdir | 比較対象のファイルを検索する基本ディレクトリ。正確な場所は、この属性と <mapper> 要素(存在する場合)の組み合わせによって異なります。 |
はい |
| present | ファイルがソースディレクトリツリーのみに存在する必要があるのか、ソースディレクトリツリーとターゲットディレクトリツリーの両方に存在する必要があるのか。有効な値は次のとおりです。
srconlyに設定することは、セレクターを <not> セレクターコンテナでラップすることと同等です。 |
いいえ。デフォルトは bothです |
Present セレクターの使用例を次に示します
<fileset dir="${ant.1.5}/src/main" includes="**/*.java">
<present present="srconly" targetdir="${ant.1.4.1}/src/main"/>
</fileset>
1.5 リリースで新しく追加されたすべての Java ソースファイルを選択します。
FileSet内の<containsregexp>タグは、そのFileSetで定義されたファイルを、expression属性で指定された正規表現に一致する内容を持つもののみに制限します。
<containsregexp>セレクターは、ResourceSelectorとして使用できます(<restrict> ResourceCollectionを参照)。
| 属性 | 説明 | 必須 |
|---|---|---|
| expression | すべてのファイルで真と一致する必要がある正規表現を指定します。 | はい |
| casesensitive | 大文字と小文字を区別するマッチを実行します。Ant 1.8.2以降 | いいえ。デフォルトは trueです |
| multiline | 複数行のマッチを実行します。Ant 1.8.2以降 | いいえ。デフォルトは falseです |
| singleline | これにより、.が改行に一致するようになります。SingleLineは複数行と混同しないでください。SingleLineはPerlの正規表現用語であり、Javaの正規表現におけるdotallに対応します。Ant 1.8.2以降 |
いいえ。デフォルトは falseです |
正規表現セレクターの使用例を以下に示します。
<fileset dir="${doc.path}" includes="*.txt">
<containsregexp expression="[4-6]\.[0-9]"/>
</fileset>
正規表現に一致する(4、5、または6の後にピリオドと0から9までの数字が続く)すべてのテキストファイルを選択します。
FileSet内の<size>タグは、includeタグで指定されたファイルに制限を設け、セレクターで指定されたサイズ制限を満たさないタグは選択されないようにします。
| 属性 | 説明 | 必須 |
|---|---|---|
| value | テスト対象となるファイルのサイズ。 | はい |
| units | value属性が表現される単位。 k、 M、 Gなどの標準的な1文字のSI記号を使用する場合、1000の倍数が使用されます。2のべき乗単位を使用する場合は、IEC規格を使用します。 Kiは1024、 Miは1048576などです。デフォルトは単位なしで、value属性が正確なバイト数を表すことを意味します。 |
いいえ |
| when | サイズの解釈方法を示します。選択されるファイルがその値より大きいか、小さいか、等しいかを指定します。この属性に使用できる値は次のとおりです。
|
いいえ。デフォルトは equalです |
サイズセレクターの使用例を以下に示します。
<fileset dir="${jar.path}">
<patternset>
<include name="**/*.jar"/>
</patternset>
<size value="4" units="Ki" when="more"/>
</fileset>
4096バイトより大きいすべてのJARファイルを選択します。
<type>タグは、特定のタイプ(ディレクトリまたは通常ファイル)のファイルを選択します。
| 属性 | 説明 | 必須 |
|---|---|---|
| type | テスト対象となるファイルの種類。使用できる値は次のとおりです。
|
はい |
${src}内のディレクトリのみを選択するタイプセレクターの使用例を以下に示します。
<fileset dir="${src}">
<type type="dir"/>
</fileset>
タイプセレクターは、他のセレクターと組み合わせて使用されることがよくあります。たとえば、templateディレクトリにも存在するファイルを選択し、空のディレクトリを選択しないようにするには、次のようにします。
<fileset dir="${src}">
<and>
<present targetdir="template"/>
<type type="file"/>
</and>
</fileset>
<modified>セレクターは、ファイルの値を計算し、キャッシュに格納された値と比較して、これらの2つの値が異なる場合にファイルを選択します。
このセレクターは高度に設定可能であるため、選択が行われる順序は次のとおりです。
比較、ハッシュ値の計算、およびストアは、特別なインターフェースの実装によって行われます。したがって、追加のパラメーターを提供できます。
<modified>セレクターは、ResourceSelectorとして使用できます(<restrict> ResourceCollectionを参照)。その場合、単純なファイルリソースをファイルにマップし、その処理を行います。リソースが別のタイプの場合、<modified>セレクターは(注意!)ハッシュ値を計算するためにコンテンツをローカルファイルにコピーしようとします。
ソースリソースがファイルシステムリソースでない場合、変更されたセレクターは、それを一時ディレクトリにダウンロードします。
| 属性 | 説明 | 必須 |
|---|---|---|
| algorithm | 使用するアルゴリズムのタイプ。使用可能な値は次のとおりです(詳細については後述)。
|
いいえ。デフォルトはdigestです |
| cache | 使用するキャッシュのタイプ。使用可能な値は次のとおりです(詳細については後述)。
|
いいえ。デフォルトはpropertyfileです |
| comparator | 使用するコンパレーターのタイプ。使用可能な値は次のとおりです。
|
いいえ。デフォルトはequalです |
| algorithmclass | カスタムアルゴリズム実装のクラス名。algorithmより優先順位が低くなります。 | いいえ |
| cacheclass | カスタムキャッシュ実装のクラス名。cacheより優先順位が低くなります。 | いいえ |
| comparatorclass | カスタムコンパレーター実装のクラス名。comparatorより優先順位が低くなります。 | いいえ |
| update | 値が異なる場合にキャッシュを更新する必要がありますか?(ブール値) | いいえ。デフォルトはtrueです |
| seldirs | ディレクトリを選択する必要がありますか?(ブール値) | いいえ。デフォルトはtrueです |
| selres | InputStreamを持たないため、チェックを行わないリソースを選択する必要がありますか?(ブール値) | いいえ。デフォルトはtrueです。ResourceSelectorとして使用する場合のみ関連します。 |
| delayupdate | trueに設定すると、キャッシュの保存は、次の終了したBuildEvent(タスクの終了、ターゲットの終了、またはビルドの終了のうち、いずれか早い方)まで遅延されます。これはパフォーマンス向上のために提供されています。 falseに設定すると、キャッシュの保存は変更ごとに発生します。この属性は、update属性に依存します。(ブール値) |
いいえ。デフォルトはtrueです |
<modified>セレクターは、カスタムインターフェース実装を見つけるためのパスのような構造を表すネストされた<classpath>要素をサポートします。
<modified>セレクターのすべての属性は、ネストされた<param/>タグで設定できます。追加の値は、以下の規則に従って<param/>タグで設定できます。
algorithm属性と同じですが、以下の追加の値があります。
| 名前 | 説明 |
|---|---|
| hashvalue | ファイルの内容をjava.lang.Stringに読み込み、そのhashValue()を使用します。追加の設定は必要ありません。 |
| digest | java.security.MessageDigestを使用します。このアルゴリズムは、次の属性をサポートします。
|
| checksum | java.util.zip.Checksumを使用します。このアルゴリズムは、次の属性をサポートします。
|
| lastmodified | ファイルのlastModifiedプロパティを使用します。追加の設定は必要ありません。 |
cache属性と同じですが、以下の追加の値があります。
| 名前 | 説明 |
|---|---|
| propertyfile | java.util.Propertiesクラスと、ファイルへのロードと保存の機能を使用します。このキャッシュ実装は、次の属性をサポートします。
|
comparator属性と同じです。
algorithmclass属性と同じです。
comparatorclass属性と同じです。
cacheclass属性と同じです。
update属性と同じです。
comparatorclass属性と同じです。
変更済みセレクターの使用例を以下に示します。
<copy todir="dest">
<fileset dir="src">
<modified/>
</fileset>
</copy>
これにより、内容が変更されたsrcからdestへのすべてのファイルがコピーされます。cache.propertiesとMD5-DigestAlgorithmを使用した更新PropertyfileCacheを使用します。
<copy todir="dest">
<fileset dir="src">
<modified update="true"
seldirs="true"
cache="propertyfile"
algorithm="digest"
comparator="equal">
<param name="cache.cachefile" value="cache.properties"/>
<param name="algorithm.algorithm" value="MD5"/>
</modified>
</fileset>
</copy>
これは、すべての値(デフォルトと同じ)を設定したCoreSelectorとして書き直した同じ例です。
<copy todir="dest">
<fileset dir="src">
<custom class="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector">
<param name="update" value="true"/>
<param name="seldirs" value="true"/>
<param name="cache" value="propertyfile"/>
<param name="algorithm" value="digest"/>
<param name="comparator" value="equal"/>
<param name="cache.cachefile" value="cache.properties"/>
<param name="algorithm.algorithm" value="MD5"/>
</custom>
</fileset>
</copy>
そして、これはCustomSelectorとして書き直した同じものです。
<target name="generate-and-upload-site">
<echo> generate the site using forrest </echo>
<antcall target="site"/>
<echo> upload the changed file </echo>
<ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.pwd}">
<fileset dir="htdocs/manual">
<modified/>
</fileset>
</ftp>
</target>
ホームページ生成(例:Apache Forrest)のビルド環境内でのこのセレクターの便利なシナリオ。ここでは、すべての変更されたファイルがサーバーにアップロードされます。したがって、CacheSelectorはアップロード時間を大幅に節約します。
<modified cacheclassname="com.mycompany.MyCache">
<classpath>
<pathelement location="lib/mycompany-antutil.jar"/>
</classpath>
</modified>
Ant自身のクラスパス外にあるjarのcom.mycompany.MyCacheをキャッシュ実装として使用します
RuleBasedCollatorは動作のためにフォーマットが必要ですが、インスタンス化中に必要になります。この場合の初期化アルゴリズムには問題があります。したがって、これを使用しないでください(または、回避策を教えてください :-)。
<signedselector>タグは、署名付きファイル、およびオプションで特定の名前で署名されたファイルを選択します。
Apache Ant 1.7以降
| 属性 | 説明 | 必須 |
|---|---|---|
| name | 確認する署名名。 | いいえ |
<readable>セレクターは、読み取り可能なファイルのみを選択します。Antはjava.io.File#canReadのみを呼び出すため、ファイルが読み取り不可能であってもJVMがこの状態を検出できない場合、このセレクターは引き続きファイルを選択します。
<writable>セレクターは、書き込み可能なファイルのみを選択します。Antはjava.io.File#canWriteのみを呼び出すため、ファイルが書き込み不可能であってもJVMがこの状態を検出できない場合、このセレクターは引き続きファイルを選択します。
<executable>セレクターは、実行可能なファイルのみを選択します。Antはjava.nio.file.Files#isExecutableのみを呼び出すため、ファイルが実行不可能であってもJVMがこの状態を検出できない場合、このセレクターは引き続きファイルを選択します。
Ant 1.10.0以降
<symlink>セレクターは、シンボリックリンクであるファイルのみを選択します。Antはjava.nio.file.Files#isSymbolicLinkのみを呼び出すため、ファイルがシンボリックリンクであってもJVMがこの状態を検出できない場合、このセレクターはファイルを選択しません。
Ant 1.10.0以降
<ownedBy>セレクターは、指定されたユーザーが所有するファイルのみを選択します。Antはjava.nio.file.Files#getOwnerのみを呼び出すため、ファイルシステムがこの操作をサポートしていない場合、このセレクターはファイルを選択しません。
Ant 1.10.0以降
| 属性 | 説明 | 必須 |
|---|---|---|
| owner | 予期される所有者のユーザー名 | はい |
| followsymlinks | セレクターはシンボリックリンクをたどる必要がありますか?(FileSetの対応する属性との対話方法も参照) | いいえ。デフォルトはtrueです |
<posixGroup>セレクターは、指定されたPOSIXグループが所有するファイルのみを選択します。Antはjava.nio.file.Files#readAttributesのみを呼び出すため、ファイルシステムがこの操作またはPOSIX属性をサポートしていない場合、このセレクターはファイルを選択しません。
Ant 1.10.4以降
| 属性 | 説明 | 必須 |
|---|---|---|
| group | POSIXグループ名 | はい |
| followsymlinks | セレクターはシンボリックリンクをたどる必要がありますか?(FileSetの対応する属性との対話方法も参照) | いいえ。デフォルトはtrueです |
<posixPermissions>セレクターは、指定されたPOSIX権限を持つファイルのみを選択します。Antはjava.nio.file.Files#getPosixFilePermissionsのみを呼び出すため、ファイルシステムがこの操作をサポートしていない場合、このセレクターはファイルを選択しません。
Ant 1.10.4以降
| 属性 | 説明 | 必須 |
|---|---|---|
| permissions | 文字列(rwxrwxrwx)または8進数( 777)形式のPOSIX権限 |
はい |
| followsymlinks | セレクターはシンボリックリンクをたどる必要がありますか?(FileSetの対応する属性との対話方法も参照) | いいえ。デフォルトはtrueです |
<scriptselector> 要素を使用すると、Apache BSF または JSR 223 でサポートされている任意の言語で複雑な選択アルゴリズムを記述できます。スクリプトと依存関係の説明については、スクリプトタスクを参照してください。
Apache Ant 1.7以降
| 属性 | 説明 | 必須 |
|---|---|---|
| language | スクリプトの言語。 | はい |
| manager | 使用するスクリプトエンジンマネージャー。この属性の使用法については、scriptタスクを参照してください。 | いいえ; デフォルトは autoです |
| src | スクリプトのファイル名 | いいえ |
| encoding | ファイルとしてのスクリプトのエンコーディング。Ant 1.10.2 以降 | いいえ。デフォルトはデフォルトの JVM 文字エンコーディングです |
| setbeans | すべてのプロパティ、参照、ターゲットをスクリプトのグローバル変数として使用するかどうか。 | いいえ。デフォルトは trueです |
| classpath | スクリプトに渡すクラスパス。 | いいえ |
| classpathref | 別の場所で定義されたパスへの参照として指定された、使用するクラスパス。 | いいえ |
このセレクターは、ネストされた <classpath> 要素を取ることができます。この要素の使用法については、scriptタスクを参照してください。
src 属性が指定されていない場合、スクリプトはセレクター宣言内にネストされている必要があります。
埋め込まれたスクリプトは、テストごとに呼び出され、bean self がセレクターにバインドされます。これには、ファイルを選択するために setSelected(boolean) を使用して設定できる selected 属性があります。
次の bean は、プロジェクト、プロパティ、ターゲットの従来のセットに加えて、すべてのスクリプトに対して構成されます。
| Bean | 説明 | タイプ |
|---|---|---|
| self | セレクターインスタンス | org.apache.tools.ant.types.optional |
| filename | 選択のファイル名 | String |
| file | 選択のファイル | java.io.File |
| basedir | Fileset のベースディレクトリ | java.io.File |
self bean は、次の属性を持つセレクターにマッピングされます。書き込み可能なのは selected フラグのみで、残りはゲッターメソッドを介して読み取り専用です。
| 属性 | 説明 | タイプ |
|---|---|---|
| selected | このファイルを選択するための書き込み可能なフラグ | boolean |
| filename | 選択のファイル名 | String |
| file | 選択のファイル | java.io.File |
| basedir | Fileset のベースディレクトリ | java.io.File |
例
<scriptselector language="javascript"> self.setSelected(true); </scriptselector>
すべてのファイルを選択します。
<scriptselector language="javascript"> self.setSelected((filename.length%2)==0); </scriptselector>
ファイル名の長さが偶数のファイルを選択します。
より複雑な選択を作成するために、他のセレクターを含むさまざまなセレクターを使用できます。それらは、子セレクターの選択をさまざまな方法で結合します。
セレクターコンテナは次のとおりです。
<and>—含まれているすべてのセレクターがファイルを選択した場合にのみ、ファイルを選択します。<majority>—セレクターの過半数がファイルを選択した場合にファイルを選択します。<none>—含まれているセレクターのいずれもファイルを選択しない場合にのみ、ファイルを選択します。<not>—セレクターを 1 つだけ含めることができ、選択するものと選択しないものを反転させます。<or>—含まれているセレクターのいずれかがファイルを選択した場合にファイルを選択します。<selector>—セレクターを 1 つだけ含み、"if" または "unless" 条件が満たされている場合に、すべてのリクエストをそのまま転送します。これは、参照を定義する場合に使用するセレクターです。<project> の要素として使用できます。また、ファイルの選択を Ant プロパティの設定に依存させたい場合にも使用します。すべてのセレクターコンテナは、他のコンテナを含む任意の他のセレクターを要素として含めることができます。コンテナを使用すると、セレクタータグは任意に深くすることができます。コンテナ内で許可されるセレクター要素の完全なリストを次に示します。
<and><contains><custom><date><depend><depth><filename><majority><none><not><or><present><selector><size><and> タグは、含まれているすべての要素によって選択されるファイルを選択します。ファイルを選択しないセレクターを見つけるとすぐに戻るため、すべてのセレクターをチェックすることが保証されているわけではありません。
And セレクターの使用例を次に示します
<fileset dir="${dist}" includes="**/*.jar">
<and>
<size value="4" units="Ki" when="more"/>
<date datetime="01/01/2001 12:00 AM" when="before"/>
</and>
</fileset>
先ミレニアム以降更新されていない、4096 バイトを超えるすべての JAR ファイルを選択します。
<majority> タグは、含まれている要素の過半数がファイルを選択している場合に、ファイルを選択します。同点は、allowtie 属性で指定されたように処理されます。
| 属性 | 説明 | 必須 |
|---|---|---|
| allowtie | ファイルを選択するセレクターと選択しないセレクターが同数の場合に、ファイルを選択するかどうか。 | いいえ。デフォルトは trueです |
Majority セレクターの使用例を次に示します
<fileset dir="${docs}" includes="**/*.html">
<majority>
<contains text="project" casesensitive="false"/>
<contains text="taskdef" casesensitive="false"/>
<contains text="IntrospectionHelper" casesensitive="true"/>
</majority>
</fileset>
3 つのフレーズ project
、taskdef
、および IntrospectionHelper
(この最後のフレーズは大文字と小文字を完全に一致させる必要があります) のうち少なくとも 2 つを含むすべての HTML ファイルを選択します。
<none> タグは、含まれている要素のいずれによっても選択されていないファイルを選択します。ファイルを選択するセレクターが見つかるとすぐに戻るため、すべてのセレクターをチェックすることが保証されているわけではありません。
None セレクターの使用例を次に示します
<fileset dir="${src}" includes="**/*.java">
<none>
<present targetdir="${dest}"/>
<present targetdir="${dest}">
<mapper type="glob" from="*.java" to="*.class"/>
</present>
</none>
</fileset>
dest ディレクトリに同等の .java または .class ファイルがない .java ファイルのみを選択します。
<not> タグは、含まれている単一のセレクターの意味を反転させます。
Not セレクターの使用例を次に示します
<fileset dir="${src}" includes="**/*.java">
<not>
<contains text="test"/>
</not>
</fileset>
src ディレクトリ内の、文字列 test
を含まないすべてのファイルを選択します。
<or> タグは、含まれている要素のいずれかによって選択されるファイルを選択します。ファイルを選択するセレクターが見つかるとすぐに戻るため、すべてのセレクターをチェックすることが保証されているわけではありません。
Or セレクターの使用例を次に示します
<fileset dir="${basedir}">
<or>
<depth max="0"/>
<filename name="*.png"/>
<filename name="*.gif"/>
<filename name="*.jpg"/>
</or>
</fileset>
トップディレクトリ内のすべてのファイルと、その下のすべての画像ファイルを選択します。
<selector> タグは、参照を通じて再利用できるセレクターを作成するために使用されます。これは、<project> タグの要素として、ターゲットの外で使用できる唯一のセレクターです。他のセレクターを 1 つだけ含めることができますが、もちろん、そのセレクターはコンテナにすることができます。
<selector> タグは、Ant プロパティが存在するかどうかに基づいて、条件付きでファイルを選択するためにも使用できます。この機能は、ターゲットまたは <patternset> 内の <include> および <exclude> タグで使用される方法とまったく同じ方法で、if および unless 属性を使用して実現されます。
| 属性 | 説明 | 必須 |
|---|---|---|
| if | 名前付きプロパティが設定されている場合にのみ、ファイルを選択できるようにします。 | いいえ |
| unless | 名前付きプロパティが設定されていない場合にのみ、ファイルを選択できるようにします。 | いいえ |
セレクター参照の使用例を次に示します
<project default="all" basedir="./ant">
<selector id="completed">
<none>
<depend targetdir="build/classes">
<mapper type="glob" from="*.java" to="*.class"/>
</depend>
<depend targetdir="docs/manual/api">
<mapper type="glob" from="*.java" to="*.html"/>
</depend>
</none>
</selector>
<target>
<zip>
<fileset dir="src/main" includes="**/*.java">
<selector refid="completed"/>
</fileset>
</zip>
</target>
</project>
関連付けられた最新のクラスファイルと javadoc ファイルを持つすべての java ファイルを zip 圧縮します。
また、プロパティが設定されているかどうかに基づいて、条件付きでファイルを選択する例を次に示します
<fileset dir="${working.copy}">
<or>
<selector if="include.tests">
<filename name="**/*Test.class">
</selector>
<selector if="include.source">
<and>
<filename name="**/*.java">
<not>
<selector unless="include.tests">
<filename name="**/*Test.java">
</selector>
</not>
</and>
</selector>
</or>
</fileset>
Java ソースファイルとテストソースおよびクラスファイルを条件付きで含むファイルセット。
独自のセレクターを作成し、<custom> タグ内で指定することにより、セレクターコンテナ内で使用できます。
最初に、セレクタークラスを Java で記述する必要があります。セレクターになるために満たす必要がある唯一の要件は、単一のメソッドを含む org.apache.tools.ant.types.selectors.FileSelector インターフェイスを実装することです。詳細については、Ant でのセレクターのプログラミングを参照してください。
それが記述されたら、<custom> タグを使用してビルドファイルに含めます。
| 属性 | 説明 | 必須 |
|---|---|---|
| classname | org.apache.tools.ant.types.selectors.FileSelector を実装するクラスの名前。 |
はい |
| classpath | カスタムセレクタークラスをロードするために使用するクラスパス。classpath も classpathref も指定されていない場合、クラスは Ant が使用するクラスパスからロードされます。 | いいえ |
| classpathref | 以前に定義されたクラスパスへの参照。classpathref も classpath も指定されていない場合、クラスは Ant が使用するクラスパスからロードされます。 | いいえ |
クラスをセレクターとして使用するために <custom> を使用する方法を次に示します
<fileset dir="${mydir}" includes="**/*">
<custom classname="com.mydomain.MySelector">
<param name="myattribute" value="myvalue"/>
</custom>
</fileset>
また、多くのコアセレクターは、<param> 要素を使用して属性を指定することにより、カスタムセレクターとして使用できます。これらは次のとおりです。
org.apache.tools.ant.types.selectors.ContainsSelector のContains セレクターorg.apache.tools.ant.types.selectors.DateSelector のDate セレクターorg.apache.tools.ant.types.selectors.DepthSelector のDepth セレクターorg.apache.tools.ant.types.selectors.FilenameSelector のFilename セレクターorg.apache.tools.ant.types.selectors.SizeSelector のSize セレクター<custom> を通じてセレクターを使用するために書き換えられた、Depth セレクターのセクションの例を次に示します。
<fileset dir="${doc.path}" includes="**/*">
<custom classname="org.apache.tools.ant.types.selectors.DepthSelector">
<param name="max" value="1"/>
</custom>
</fileset>
ベースディレクトリと、その下の 1 つのディレクトリにあるすべてのファイルを選択します。
独自のセレクターの記述に関する詳細については、Ant でのセレクターのプログラミングを参照してください。