セレクター

セレクターは、<fileset> を構成するファイルを、<include> および <exclude> タグによって提供されるファイル名以外の基準に基づいて選択するためのメカニズムです。

セレクターの使用方法

セレクターは FileSet の要素であり、その中に記述します。また、<selector> タグを使用してターゲットの外で定義し、参照として使用することもできます。

セレクターはそれぞれ異なる属性を持っています。一部のセレクターは他のセレクターを含むことができ、これらは セレクターコンテナ と呼ばれます。また、カスタムセレクター と呼ばれる、ユーザー定義の拡張を可能にするセレクターのカテゴリもあります。Apache Ant に組み込まれているものは コアセレクター と呼ばれます。

コアセレクター

コアセレクターは、Ant に標準で付属しているものです。これらは fileset 内で使用でき、セレクターコンテナ内に含めることができます。

コアセレクターは以下のとおりです。

Contains セレクター

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 ファイルを選択します。

Date セレクター

FileSet 内の <date> タグは、include タグで指定されたファイルに制限を設け、セレクターで指定された日付制限を満たさない最終変更日のタグは選択されません。

属性 説明 必須
datetime テストする日時を指定します。pattern 属性で指定された代替パターンを使用する場合を除き、米国ロケールを使用して MM/dd/yyyy hh:mm a 形式にする必要があります。 少なくとも 2 つのうち 1 つ
millis テストする必要のある 1970 年からのミリ秒数。datetime 属性を使用する方がはるかに簡単です。
when 日付を解釈する方法、選択されるファイルの最終変更時刻が指定された値より前、後、または等しいかどうかを示します。この属性で使用できる値は次のとおりです。
  • before — 最終変更日が指定された日付より前のファイルを選択します
  • after — 最終変更日が指定された日付より後のファイルを選択します
  • equal — 最終変更日がこの正確な日付であるファイルを選択します
いいえ。デフォルトは 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> タグは、最終変更日が別の場所にある同等のファイルよりも新しいファイルを選択します。

<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 セレクター

<depth> タグは、fileset のベースディレクトリからのディレクトリレベルの深さに基づいてファイルを選択します。

属性 説明 必須
min ファイルが選択されるために、ベースディレクトリより下にある必要のあるディレクトリレベルの最小数。 少なくとも 2 つのうち 1 つ。デフォルトは制限なし
max ファイルが選択されるために、ベースディレクトリより下にあることができるディレクトリレベルの最大数。

Depth セレクターの使用例を次に示します

<fileset dir="${doc.path}" includes="**/*">
    <depth max="1"/>
</fileset>

ベースディレクトリと、その下の 1 つのディレクトリにあるすべてのファイルを選択します。

Different セレクター

<different> セレクターは、別の場所にある同等のファイルと「異なる」と見なされた場合にファイルを選択します。2 つのファイル間の差異を判断する規則は次のとおりです

  1. セレクターを適用するリソースコレクションにのみファイルが存在し、targetdir に存在しない場合(またはマッパーを適用した後)、ファイルが選択されます。
  2. ファイルが targetdir (またはマッパーを適用した後)にのみ存在する場合は無視されます。
  3. 長さが異なるファイルは異なります。
  4. ignoreFileTimesoff に設定されている場合、ファイルのタイムスタンプが異なると、ファイルは異なると見なされます。
  5. ignoreContentstrue に設定されていない限り、2 つのファイルに対してバイト単位のチェックが実行されます。

これは、依存関係チェックを適切に処理しないプログラムやタスクを扱う場合に役立つセレクターです。前のタスクが常に出力ファイルを作成する場合でも、フォローアップタスクは別のセレクターで作成されたコピーから実行できるため、それらの依存関係は、単なるタイムスタンプではなく、ファイルの絶対状態に基づいて実行されます。例:Web サイトからフェッチしたもの、または一部のプログラムの出力。チェックの量を減らすために、このタスクを <copy> タスク内で使用する場合は、preservelastmodifiedtrue に設定して、ソースファイルから宛先ファイルにタイムスタンプを伝播します。

<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 セレクター

<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> タグは、別のディレクトリツリーに同等のファイルがあるファイルを選択します。

<present> タグは、テスト対象のファイルの場所を定義するために、含まれる <mapper> 要素の使用をサポートしています。<mapper> 要素が指定されていない場合は、identity 型マッパーが使用されます。

<present> セレクターは大文字と小文字を区別します。

属性 説明 必須
targetdir 比較対象のファイルを検索する基本ディレクトリ。正確な場所は、この属性と <mapper> 要素(存在する場合)の組み合わせによって異なります。 はい
present ファイルがソースディレクトリツリーのみに存在する必要があるのか、ソースディレクトリツリーとターゲットディレクトリツリーの両方に存在する必要があるのか。有効な値は次のとおりです。
  • srconly — ソースディレクトリツリーにのみ存在し、ターゲットディレクトリツリーには存在しない場合にのみファイルを選択します
  • both — ソースディレクトリツリーとターゲットディレクトリツリーの両方にファイルが存在する場合にのみファイルを選択します
この属性を 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属性が表現される単位。 kMGなどの標準的な1文字のSI記号を使用する場合、1000の倍数が使用されます。2のべき乗単位を使用する場合は、IEC規格を使用します。Kiは1024、Miは1048576などです。デフォルトは単位なしで、value属性が正確なバイト数を表すことを意味します。 いいえ
when サイズの解釈方法を示します。選択されるファイルがその値より大きいか、小さいか、等しいかを指定します。この属性に使用できる値は次のとおりです。
  • less—指定されたサイズよりも小さいファイルを選択します
  • more—指定されたサイズよりも大きいファイルを選択します
  • equal—この正確なサイズのファイルを選択します
いいえ。デフォルトは equal です

サイズセレクターの使用例を以下に示します。

<fileset dir="${jar.path}">
  <patternset>
    <include name="**/*.jar"/>
  </patternset>
  <size value="4" units="Ki" when="more"/>
</fileset>

4096バイトより大きいすべてのJARファイルを選択します。

タイプセレクター

<type>タグは、特定のタイプ(ディレクトリまたは通常ファイル)のファイルを選択します。

属性 説明 必須
type テスト対象となるファイルの種類。使用できる値は次のとおりです。
  • file—通常ファイル
  • dir—ディレクトリ
はい

${src}内のディレクトリのみを選択するタイプセレクターの使用例を以下に示します。

<fileset dir="${src}">
  <type type="dir"/>
</fileset>

タイプセレクターは、他のセレクターと組み合わせて使用されることがよくあります。たとえば、templateディレクトリにも存在するファイルを選択し、空のディレクトリを選択しないようにするには、次のようにします。

<fileset dir="${src}">
    <and>
        <present targetdir="template"/>
        <type type="file"/>
    </and>
</fileset>

変更済みセレクター

<modified>セレクターは、ファイルの値を計算し、キャッシュに格納された値と比較して、これらの2つの値が異なる場合にファイルを選択します。

このセレクターは高度に設定可能であるため、選択が行われる順序は次のとおりです。

  1. ファイルの絶対パスを取得します
  2. 設定されたキャッシュからキャッシュされた値を取得します(キーとして絶対パスを使用)。
  3. 設定されたアルゴリズムから新しい値を取得します。
  4. これらの2つの値を設定されたコンパレーターと比較します。
  5. 必要に応じて、要求された場合はキャッシュを更新します。
  6. 比較結果に応じて選択を実行します。

比較、ハッシュ値の計算、およびストアは、特別なインターフェースの実装によって行われます。したがって、追加のパラメーターを提供できます。

<modified>セレクターは、ResourceSelectorとして使用できます(<restrict> ResourceCollectionを参照)。その場合、単純なファイルリソースをファイルにマップし、その処理を行います。リソースが別のタイプの場合、<modified>セレクターは(注意!)ハッシュ値を計算するためにコンテンツをローカルファイルにコピーしようとします。

ソースリソースがファイルシステムリソースでない場合、変更されたセレクターは、それを一時ディレクトリにダウンロードします。

属性 説明 必須
algorithm 使用するアルゴリズムのタイプ。使用可能な値は次のとおりです(詳細については後述)。
  • hashvalue—HashvalueAlgorithm
  • digest—DigestAlgorithm
  • checksum—ChecksumAlgorithm
  • lastmodified—LastModifiedAlgorithm
いいえ。デフォルトはdigestです
cache 使用するキャッシュのタイプ。使用可能な値は次のとおりです(詳細については後述)。
  • propertyfile—PropertyfileCache
いいえ。デフォルトはpropertyfileです
comparator 使用するコンパレーターのタイプ。使用可能な値は次のとおりです。
  • equal—EqualComparator
  • rule—java.text.RuleBasedCollator (制限事項についてはを参照)
いいえ。デフォルトは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

algorithm属性と同じですが、以下の追加の値があります。

名前 説明
hashvalue ファイルの内容をjava.lang.Stringに読み込み、そのhashValue()を使用します。追加の設定は必要ありません。
digest java.security.MessageDigestを使用します。このアルゴリズムは、次の属性をサポートします。
  • algorithm.algorithm(オプション):ダイジェストアルゴリズムの名前(例:MD5またはSHA)。デフォルトはMD5です
  • algorithm.provider(オプション):ダイジェストプロバイダーの名前。デフォルトはnullです
checksum java.util.zip.Checksumを使用します。このアルゴリズムは、次の属性をサポートします。
  • algorithm.algorithm(オプション):アルゴリズムの名前(例:CRCまたはADLER)。デフォルトはCRCです
lastmodified ファイルのlastModifiedプロパティを使用します。追加の設定は必要ありません。
cache

cache属性と同じですが、以下の追加の値があります。

名前 説明
propertyfile java.util.Propertiesクラスと、ファイルへのロードと保存の機能を使用します。このキャッシュ実装は、次の属性をサポートします。
  • cache.cachefile(オプション):プロパティファイルの名前。デフォルトはcache.propertiesです
comparator

comparator属性と同じです。

algorithmclass

algorithmclass属性と同じです。

comparatorclass

comparatorclass属性と同じです。

cacheclass

cacheclass属性と同じです。

update

update属性と同じです。

seldirs

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に関する注意

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セレクター

<posixGroup>セレクターは、指定されたPOSIXグループが所有するファイルのみを選択します。Antはjava.nio.file.Files#readAttributesのみを呼び出すため、ファイルシステムがこの操作またはPOSIX属性をサポートしていない場合、このセレクターはファイルを選択しません。

Ant 1.10.4以降

属性 説明 必須
group POSIXグループ名 はい
followsymlinks セレクターはシンボリックリンクをたどる必要がありますか?(FileSetの対応する属性との対話方法も参照) いいえ。デフォルトはtrueです

PosixPermissionsセレクター

<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 セレクター

<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 セレクター

<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 つのフレーズ projecttaskdef、および IntrospectionHelper (この最後のフレーズは大文字と小文字を完全に一致させる必要があります) のうち少なくとも 2 つを含むすべての HTML ファイルを選択します。

None セレクター

<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> タグは、含まれている単一のセレクターの意味を反転させます。

Not セレクターの使用例を次に示します

<fileset dir="${src}" includes="**/*.java">
    <not>
        <contains text="test"/>
    </not>
</fileset>

src ディレクトリ内の、文字列 test を含まないすべてのファイルを選択します。

Or セレクター

<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 カスタムセレクタークラスをロードするために使用するクラスパス。classpathclasspathref も指定されていない場合、クラスは Ant が使用するクラスパスからロードされます。 いいえ
classpathref 以前に定義されたクラスパスへの参照。classpathrefclasspath も指定されていない場合、クラスは Ant が使用するクラスパスからロードされます。 いいえ

クラスをセレクターとして使用するために <custom> を使用する方法を次に示します

<fileset dir="${mydir}" includes="**/*">
    <custom classname="com.mydomain.MySelector">
        <param name="myattribute" value="myvalue"/>
    </custom>
</fileset>

また、多くのコアセレクターは、<param> 要素を使用して属性を指定することにより、カスタムセレクターとして使用できます。これらは次のとおりです。

<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 でのセレクターのプログラミングを参照してください。