常に上書きする

広告

「copy」を実行する場合、コピーするファイルがコピー先に存在しないか、又は存在しても新しくなければ実行されません。そこで常に上書きしてコピーを行わせたい場合には「overwrite」属性に「true」を指定します。

<copy file="./class/test.class" todir="./to" overwrite="true"/>

では実際に試してみましょう。注意する点としては<fileset>要素を使う場合にはファイルのコピー先の指定に「tofile」ではなく「todir」を指定しなければならない点です。これは<fileset>要素はファイルの集合を表現するのに使うわけですから、コピー先が単一のファイルではなくディレクトリである必要があるためだと思われます。

では実際に試してみましょう。今回の構成は下記のようになっています。

-sample5     build.xml
  |
  +--src     test.java
  |
  +--class   test.class
  |
  +--to

コンパイル後に「to」ディレクトリにクラスファイルをコピーしますが、既に「to」ディレクトリにまったく同じ(作成日時も同じ)クラスファイルがあっても上書きしてみます。

コンパイルするプログラムファイルは下記です。(中身は意味がないので省略します)。

test.java

ビルドファイルは下記です。

build3.xml

<?xml version="1.0" encoding="Shift_JIS"?>

<project name="antsample" default="compile">

  <target name="compile">
    <javac srcdir="./src" destdir="./class" />
    <copy file="./class/test.class" todir="./to" overwrite="true"/>
  </target>

</project>

ではantを実行してみます。

AntでのCopyタスクで常に上書き

1回目は普通にコンパイルしてコピーが行われます。そして同じビルドファイルを再度実行してみます。上書き指定していない場合、ソースファイルに変更がないためコンパイルは実行されず、その結果クラスファイルも更新されないのでコピーは実行されませんが、上書き指定している場合はコピーは常に行われます。

AntでのCopyタスクで常に上書き

上記の赤い四角で囲まれた部分を見てください。「copy」タスクだけは実行されていることが確認できます。

( Written by Tatsuo Ikura )