一つのファイルやファイルセットを新しいファイルやディレクトリにコピーします。
デフォルトでは、コピー元ファイルがコピー先ファイルよりも新しいか、
コピー先ファイルが無い場合にのみ、ファイルがコピーされます。
しかしながら、overwrite 属性により、
明示的にファイルを上書きすることもできます。
FileSet はコピーするファイルを選択するのに使われます。
<fileset> を使うには、
todir 属性が設定されていなければなりません。
注意: コピー操作にフィルタを使う場合は、 コピーするファイルをテキストファイルだけに制限するべきです。 バイナリファイルにフィルタを使用すると、コピー操作によりファイルが壊れてしまうでしょう。 このことは、filter タスクにより暗黙にフィルタが指定された場合であろうと、 フィルタセットとして 明示的にフィルタが指定された場合であろうと当てはまります。
| 属性 | 説明 | 必須 |
| file | コピーするファイル |
<fileset>要素がネストされていない限りはYes |
| preservelastmodified | コピーされたファイルに、 オリジナルソースファイルと同じ最終更新時刻を設定します。 (注意: Java 1.1では無視) | No; デフォルトはfalse |
| tofile | コピー先となるファイル |
file 属性には、
tofile か todir のいずれかが使えます。
ネストされた <fileset> 要素には、
ファイルセットの数が1よりも大きいか、
dir 属性のみしか
<fileset> 要素中で指定されていないか、
file 属性も指定されている場合、
todir のみが指定可能です。 |
| todir | コピー先のディレクトリ | |
| overwrite | コピー先のファイルが新しくても既存のファイルを上書きします。 | No; デフォルトはfalse |
| filtering | コピーの際に、グローバルビルドファイルフィルタを用いた
トークンフィルタを使うかどうか示します。注意:
この属性が指定されてなかったり、この属性の値が false
(noまたはoff) だったとしても、ネストされた
<filterset> 要素は常に使われます。 |
No; デフォルトはfalse |
| flatten | ソースディレクトリのディレクトリ構造を無視して、 全てのファイルを todir 属性で指定された一つのディレクトリにコピーします。 flatten mapper を使っても同じ効果が得られることに注意してください。 | No; デフォルトはfalse |
| includeEmptyDirs | ネストしたfilesetに入っている空のディレクトリをコピーするか。 | No; デフォルトはtrue |
| failonerror | コピーするファイルが存在しない場合や、 ネストされたファイルセットの1つが存在しないディレクトリを指していた場合や、 コピーの実行中にエラーが発生した場合に、 警告メッセージをログ出力しますが、ビルドを停止しません。 | No; デフォルトはtrue |
| verbose | コピーされるファイルのログを取る | No; デフォルトはfalse |
| encoding | フィルタコピーの際に、 ファイルにはこのエンコーディングが使われていると仮定します。 Ant 1.5 から | No; デフォルトは JVM のデフォルトエンコーディング |
| outputencoding | ファイルの書き込みに使われるエンコーディング。 Ant 1.6 から | No; デフォルトは encoding 属性が指定された場合はその値、 指定されなかった場合は JVM のデフォルトエンコーディング |
| enablemultiplemappings | 値が true の場合は、 ソースパスの各ファイル/ディレクトリに対する(1つ以上の)マッピング結果をすべて処理します。 false の場合は(マッピング結果の)最初のファイルかディレクトリだけを処理します。 この属性はネストした mapper 要素が存在する場合のみ効果があります。 Ant 1.6 から | No; デフォルトはfalse |
fileset は、
コピーするファイルを選択するのに使われます。
fileset を使うには、
todir 属性を設定しなければなりません。
mapper 要素をネストすることにより、
ファイル名の変換を定義できます。
<copy> で使われるデフォルトの mapper は
identity mapper です。
フィルタセットは、
コピーされるファイルにおいてトークンを置換するのに使われます。
フィルタセットを使うには、
<filterset> 要素をネストします。
copy タスクはネストされた FilterChain をサポートしています。
<filterset> 要素と <filterchain> 要素を、 ひとつの <copy> タスク内で同時に使用した場合は、 まず最初に全ての <filterchain> 要素が処理されて、 そのあとに <filterset> 要素が処理されます。
一つのファイルのコピー
<copy file="myfile.txt" tofile="mycopy.txt"/>
一つのファイルをディレクトリにコピー
<copy file="myfile.txt" todir="../some/other/dir"/>
あるディレクトリを別のディレクトリにコピー
<copy todir="../new/dir">
<fileset dir="src_dir"/>
</copy>
ファイルの集合を、あるディレクトリにコピー
<copy todir="../dest/dir">
<fileset dir="src_dir">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy todir="../dest/dir">
<fileset dir="src_dir" excludes="**/*.java"/>
</copy>
ファイルの集合を、
ファイルコピー中にファイル名に .bak を追加しながら、
あるディレクトリにコピー
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<mapper type="glob" from="*" to="*.bak"/>
</copy>
全てのファイルにおいて、 @TITLE@を Foo Bar に置換しながらファイルの集合をあるディレクトリにコピー
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
Unix での注意:
ファイルがコピーされる時ファイルパーミッションは保持されず、
代わりにデフォルトの UMASK パーミッションとなります。
これは、現在の Java ランタイムにおいて
ファイルのパーミッションを取得し、設定する方法が無いことに起因しています。
パーミッションを保持するコピー機能が必要な場合には、
代わりに <exec executable="cp" ... > を使ってください。
Windows での注意: あるファイルを、そのファイル名の、 大文字小文字だけが違うファイルが既に存在するディレクトリにコピーする場合、 コピーされたファイルはオリジナルの大文字小文字を取ります。 ここで起こっているのは、コピーする前に、 出力先ディレクトリのファイルを削除しているという事です。
Copyright © 2000-2004 The Apache Software Foundation. All rights Reserved.