FileSetはファイルのグループです。これらのファイルは、ベースディレクトリから始まるディレクトリツリー内にあり、複数のPatternSetとSelectorから取得されたパターンによってマッチングされます。
PatternSetは、ネストされた<patternset>要素として指定できます。さらに、FileSetは暗黙的なPatternSetを保持し、ネストされた<include>、<includesfile>、<exclude>、<excludesfile>要素をPatternSetの属性と同様に直接サポートします。
Selectorは、FileSet内のネストされた要素として使用できます。FileSet内のいずれかのSelectorがファイルを選択しない場合、そのファイルはFileSetの一部とは見なされません。これにより、FileSetは<and>セレクタコンテナと同等になります。
| 属性 | 説明 | 必須 |
|---|---|---|
| dir | このFileSetのディレクトリツリーのルート。 | dirまたはfileのいずれか1つを必ず指定する必要があります。 |
| file | 単一ファイルのfilesetを指定するためのショートカット。 | |
| defaultexcludes | デフォルトの除外を使用するかどうかを示します (yes|no)。 |
いいえ。デフォルトはyes |
| includes | 含める必要があるファイルのパターンのカンマまたはスペース区切りのリスト。 | いいえ。デフォルトはすべてのファイル。 |
| includesfile | ファイル名。このファイルの各行は、includeパターンとして扱われます。 注記: ファイルが空で、filesetに対して他のパターンが定義されていない場合、すべてのファイルが含まれます。 |
いいえ |
| excludes | 除外する必要があるファイルのパターンのカンマまたはスペース区切りのリスト。 | いいえ。デフォルトは、defaultexcludesがnoの場合、デフォルトの除外またはなし。 |
| excludesfile | ファイル名。このファイルの各行は、excludeパターンとして扱われます。 | いいえ |
| casesensitive | includeとexcludeのパターンを大文字と小文字を区別して扱う必要がありますか? | いいえ。デフォルトはtrue |
| followsymlinks | シンボリックリンクをたどる必要がありますか?下記の注記参照。 | いいえ。デフォルトはtrue |
| erroronmissingdir | ベースディレクトリが存在しない場合の動作を指定します。trueの場合、ビルドエラーが発生し、 falseの場合、filesetは無視/空になります。 Apache Ant 1.7.1以降 |
いいえ。デフォルトはtrue(下位互換性のため) |
| refid | このfilesetを、別の場所で定義されたfilesetへの参照にします。指定された場合、他の属性やネストされた要素は許可されません。 |
いいえ |
注記: カノニカルパスがパスと異なるすべてのファイル/ディレクトリは、シンボリックリンクと見なされます。Unixシステムでは、これは通常、ファイルが実際にシンボリックリンクであることを意味しますが、他のプラットフォームでは誤った結果につながる可能性があります。
AntはJREが移植可能と見なす機能に制限されており、シンボリックリンクはそのような機能の1つであり、長い間移植不可能と見なされてきました。Java 7およびNIO.2でこれは変更されましたが、シンボリックリンクの完全なサポートはまだ不足しています(特にZipファイルでは)。Antでのシンボリックリンクの完全なサポートには、FileSetの実装の変更と、それから派生するすべてのタスクや/またはタイプの見直しが必要です。現在、FileSetのfollowsymlinksのセマンティクスは、false
がシンボリックリンクを完全に除外し、true
がセレクタによってシンボリックリンクを考慮することを許可するようなものです。セレクタには、適切なセマンティクスを持つ独自のfollowsymlinks属性を持つことができます。つまり、false
はセレクタがシンボリックリンク自体のプロパティを検査することを許可し、true
はそのターゲットのプロパティを検査することを許可します。
<fileset dir="${server.src}" casesensitive="yes">
<include name="**/*.java"/>
<exclude name="**/*Test*"/>
</fileset>
Javaソースファイルであり、名前にTestというテキストが含まれていない${server.src}ディレクトリ内のすべてのファイルをグループ化します。
<fileset dir="${server.src}" casesensitive="yes">
<patternset id="non.test.sources">
<include name="**/*.java"/>
<exclude name="**/*Test*"/>
</patternset>
</fileset>
上記の例と同じファイルをグループ化しますが、他の<fileset>要素で参照できるPatternSetも、異なるディレクトリにルートを置きます。
<fileset dir="${client.src}" >
<patternset refid="non.test.sources"/>
</fileset>
上記の例と同じパターンを使用して、${client.src}ディレクトリ内のすべてのファイルをグループ化します。
<fileset dir="${server.src}" casesensitive="yes">
<filename name="**/*.java"/>
<filename name="**/*Test*" negate="true"/>
</fileset>
上記の最初の例と同じファイルをグループ化しますが、<filename>セレクタを使用します。
<fileset dir="${server.src}" casesensitive="yes">
<filename name="**/*.java"/>
<not>
<filename name="**/*Test*"/>
</not>
</fileset>
<filename>セレクタと<not>セレクタコンテナの組み合わせを使用して、前の例と同じファイルをグループ化します。
<fileset dir="src" includes="main/"/>
src/main内のすべてのファイル(例:src/main/Foo.javaまたはsrc/main/application/Bar.java)を選択します。