Directory-based Tasks


Some tasks use directory trees for the task they perform. For example, the javac task, which works upon a directory tree with .java files. Sometimes it can be very useful to work on a subset of that directory tree. This section describes how you can select a subset of such a directory tree.

幾つかのタスクではタスクを実行するためにディレクトリツリーを使います。 例えば、 ディレクトリツリーの.javaファイルに対して行う、 javacタスクなどです。 場合により、ディレクトリツリーの一部に対し動作させられたらとても便利です。 この節では、 そのようなディレクトリツリーのうち、どのようにして、その一部を選ぶのかについて説明します。

Ant gives you two ways to create a subset, both of which can be used at the same time:

Ant にそのような部分集合を作るのに2つの方法があり、 その両方を同時に使うこともできます:

When both inclusion and exclusion are used, only files/directories that match the include patterns, and don't match the exclude patterns, are used.

選択と除外が共に使われた場合、 選択パターンにマッチし、除外パターンにマッチしないファイル/ディレクトリのみが選択されます。

Patterns can be specified inside the buildfile via task attributes or nested elements and via external files. Each line of the external file is taken as a pattern that is added to the list of include or exclude patterns.

パターンは、 タスクの属性およびネストされた要素や、外部のファイルによりビルドファイルの中で指定されます。 外部ファイルの各行は選択および除外パターンのリストに追加されるパターンとして扱われます。



As described earlier, patterns are used for the inclusion and exclusion. These patterns look very much like the patterns used in DOS and UNIX:

先に述べた通り、選択や除外のためにパターンが使われます。 これらのパターンは DOS や UNIX で使われるパターンとよく似ています:

'*' matches zero or more characters, '?' matches one character.

'*' は 0 かそれ以上の文字にマッチし、 '?' は一つの文字にマッチします。



*.java  matches  .java, and, but not FooBar.xml (does not end with .java).

*.java  は  .javax.javaおよびFooBar.javaにマッチしますが、 FooBar.xml にはマッチしません。(.javaで終っていません。)

?.java  matches,, but not .java or (both don't have one character before .java).

?.java  は  x.javaA.javaにマッチしますが にはマッチしません。 (どちらも.javaの前に1文字のみありません。)

Combinations of *'s and ?'s are allowed.


Matching is done per-directory. This means that first the first directory in the pattern is matched against the first directory in the path to match. Then the second directory is matched, and so on. For example, when we have the pattern /?abc/*/*.java and the path /xabc/foobar/, the first ?abc is matched with xabc, then * is matched with foobar, and finally *.java is matched with They all match, so the path matches the pattern.

マッチングはディレクトリ毎に行われます。 これは、最初に、 パターン中の最初のディレクトリが、パス中の最初のディレクトリに対しマッチして、 次のディレクトリがマッチする、などです。 例えば、 /?abc/*/*.java のようなパターンと /xabc/foobar/ なるパスがあった場合、 最初に?abcxabcにマッチし、 次に*foobarにマッチし、 最後に*.javatest.javaにマッチします。 それらの全てがマッチして、そのパスがパターンにマッチしたことになります。

To make things a bit more flexible, we add one extra feature, which makes it possible to match multiple directory levels. This can be used to match a complete directory tree, or a file anywhere in the directory tree. To do this, ** must be used as the name of a directory. When ** is used as the name of a directory in the pattern, it matches zero or more directories. For example: /test/** matches all files/directories under /test/, such as /test/, or /test/foo/bar/xyz.html, but not /xyz.xml.

より柔軟に対応するために、 複数階層のディレクトリにマッチできるような機能を一つ加えました。 これは、ディレクトリツリー全体や、 あるディレクトリツリーの任意の場所にあるファイルにマッチするために使うことができます。 これを行うには、 ディレクトリ名として**を使わなければなりません。 パターン中で、ディレクトリ名として**が使われた場合、 これは 0 あるいはそれ以上のディレクトリとマッチします。 例えば: /test/** は、 /test/といった /test/の下の全てのファイル/ディレクトリにマッチしますが、 /xyz.xmlにはマッチしません。

There is one "shorthand" - if a pattern ends with / or \, then ** is appended. For example, mypackage/test/ is interpreted as if it were mypackage/test/**.

一つの "省略記法" があります - パターンが /\で終わった場合、 ** が追加されます。 例えば、mypackage/test/mypackage/test/**として解釈されます。

Example patterns:


(jakarta/ の部分がありません。)
**/CVS/* Matches all files in CVS directories that can be located anywhere in the directory tree.
以下にはマッチしません/But not:
      org/apache/CVS/foo/bar/Entries (foo/bar/ part does not match)
org/apache/jakarta/** Matches all files in the org/apache/jakarta directory tree.
org/apache/jakarta ディレクトリツリーにある全てのファイルにマッチします。
以下にはマッチしません/But not:
(jakarta/ part is missing).
org/apache/**/CVS/* Matches all files in CVS directories that are located anywhere in the directory tree under org/apache.
org/apacheの下にあるディレクトリツリーの下の任意の場所にある CVSディレクトリの全てのファイルにマッチします。
以下にマッチしません/But not:
(foo/bar/ 部分がマッチしません)
**/test/** Matches all files that have a test element in their path, including test as a filename.
testというファイル名を含め、 パス中にtest要素がある全てのファイルにマッチします。

When these patterns are used in inclusion and exclusion, you have a powerful way to select just the files you want.

これらのパターンが(ファイルの)選択と除外の(両方に)使われた場合、 必要なファイルのみを選択する協力な方法を得たことになります。


<copy todir="${dist}">
  <fileset dir="${src}"

This copies all files in directories called images that are located in the directory tree defined by ${src} to the destination directory defined by ${dist}, but excludes all *.gif files from the copy.

この例では、 ${src}によって定義されるディレクトリ中の下の imagesという名前のディレクトリにある全てのファイルを ${dist}により定義される出力先ディレクトリにコピーします。 しかしながら、*.gifファイルは全てコピーから除きます。

This example can also be expressed using nested elements:


<copy todir="${dist}">
  <fileset dir="${src}">
    <include name="**/images/*"/>
    <exclude name="**/*.gif"/>

Default Excludes


There are a set of definitions that are excluded by default from all directory-based tasks. They are:

これは、全てのディレクトリベースタスクにおいて、 デフォルトで除外される定義の集合です。 それは以下の通りです:


If you do not want these default excludes applied, you may disable them with the defaultexcludes="no" attribute.

これらのデフォルト除外集合を使いたくない場合には、 defaultexcludes="no" 属性によりこれらを無効にできます。

Copyright © 2000-2002 Apache Software Foundation. All rights Reserved.

[訳注:これは漆島賢二が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]