Ant の fileset 要素はデフォルトで .svn フォルダを除外してくれる

Ant の war タスクで WAR ファイルを作る時、fileset 要素で格納するファイル群を指定する。そこで「SVN 同期しているプロジェクトだから、隠しフォルダの .svn フォルダが含まれちゃうんじゃないかなー」と思ったが、特に exclude 要素で指定をしなくとも .svn フォルダが格納されていなかった。

「どうなってるんだ?」と思い、ようやく体系的に Ant を解説しているサイトを見てみたら、答えが書いてあった。

「defaultexcludes」属性はデフォルト除外パターンを使うかどうかを指定します。デフォルトでは使うことになっています。デフォルト除外パターンというのは以下になります。

(…中略…)

  • **/.svn
  • **/.svn/**

(…後略…)

デフォルト除外集合

CVSのソース管理にて使用されるCVSフォルダはcopyタスクではコピーされません。これはファイルセットにはデフォルトで除外するパターンが設定されており、CVSフォルダもその1つだからです。これらのデフォルト除外パターンはdefaultexcludes属性を"no"指定することで無効にできます。

つまり要するに、CVS や SVN が生成するメタファイルはデフォルトでファイルセットから除外するよう、パターンが組み込まれている。だから自前で exclude 要素を書く必要もない。何かの理由があってデフォルト除外パターンを無効にしたいなら、defaultexcludes="no" とすれば良い、と。

Ant 便利だな。