- 2012/08/15 一部修正しました
- 3.1. パターン
- 3.2. パターンセット(PatternSet)
- 3.3. ファイルセット(FileSet)
- 3.4. デフォルト除外集合
3.4. デフォルト除外集合
ファイルセットの属性の説明において、デフォルト除外集合というものが出てきました。デフォルト除外集合とは、暗黙的にファイルの集合から除外されるパターンの集合です。例えば、Emacsのバックアップファイル(ファイル名に最後に「~」がついたもの)などは通常の方法ではファイルセットに含めることはできません。
デフォルト除外集合には次のパターンが含まれています。(Ant1.8現在)
- **/*~
- **/#*#
- **/.#*
- **/%*%
- **/._*
- **/CVS
- **/CVS/**
- **/.cvsignore
- **/SCCS
- **/SCCS/**
- **/vssver.scc
- **/.svn
- **/.svn/**
- **/.DS_Store
- **/.git
- **/.git/**
- **/.gitattributes
- **/.gitignore
- **/.gitmodules
- **/.hg
- **/.hg/**
- **/.hgignore
- **/.hgsub
- **/.hgsubstate
- **/.hgtags
- **/.bzr
- **/.bzr/**
- **/.bzrignore
これらのパターンにマッチするファイルをファイルセットに含めるためには、defaultexcludes属性を「no」にしてやる必要があります。
この除外規則は、ファイルセットだけではなく、パターンを利用する他のデータ構造やタスクにおいて常に適用されます。例として、ファイルを削除するDeleteタスクを見てみましょう。Deleteタスクは、file属性、もしくは子要素のファイルセットで削除対象のファイルを指定します。
<delete> <fileset dir="${src}" includes="**/*~"> </delete>
このタスクは、${src}ディレクトリ以下のすべてのEmacsバックアップファイルを削除するように見えます。しかし、デフォルト除外の規則のため、実際には何も起きません。意図したように動作させるには、次のように記述します。
<delete> <fileset dir="${src}" includes="**/*~" defaultexcludes="no" /> </delete>
Deleteタスクのfile属性を用いた場合も同様です。
<delete file="${src}/**/*~" />
これでは何も起きないので、次のように記述します。
<delete file="${src}/**/*~" defaultexcludes="no" />
(実習課題)
まず、このファイル(Project.tar.gz)をダウンロードして作業ディレクトリに展開して下さい。展開するとProjectディレクトリが生成されます(展開されたファイルの中身はすべて空ですのでコンパイル等は行えません)。
このプロジェクトにはサーバ用のプログラムとクライアント用のプログラムが存在し、それぞれserverディレクトリとclientディレクトリにソースなどの関連ファイルが置かれています。ソースを編集したりコンパイルしたりしているうちにいろいろと副次的なファイルができてきたので、それらを削除する処理をAntで作成しようと考えました。
そこで、次の処理を行うビルドファイル(build.xml)をProjectディレクトリ直下に作成してください。
- 以下の条件を満たすパターンセットを単独で定義すること。すべて任意の深さのもの対象とする。
- すべてのクラスファイル(ファイル名が「.class」で終わるファイル)を含む。
- emacsのバックアップファイル(ファイル名が「~」で終わるファイル)を含む。
- ファイル名が「Test」で始まるファイル含む。ただしJavaソースファイル(ファイル名が「.java」で終わるファイル)は除外する。
- 定義するターゲットは以下の3つ。 なお削除処理では前項で定義したパターンセットを利用すること。
- clean-client clientディレクトリ以下の削除対象ファイルを削除する。
- clean-server serverディレクトリ以下の削除対象ファイルを削除する。
- clean clean-clientとclean-server両方のターゲットを実行する。
- デフォルトターゲットはcleanターゲットとする。