web-dev-qa-db-ja.com

Ant:同じファイルセットを複数の場所にコピーします

1つのフォルダを他のいくつかの場所にコピーするAntスクリプトが必要です。良い従順なプログラマーとして、私は自分自身を繰り返したくありません。このようなファイルセットを取得する方法はありますか?

<copy todir="${target}/path/to/target/1">
    <fileset dir="${src}">
        <exclude name='**/*svn' />
    </fileset>
</copy>

そして、filesetを変数に格納して、再利用できるようにしますか?

30
Marcus Downing

ファイルセットでid属性を宣言し、各コピータスクでそれを参照します。

例えば:

<project name="foo">
  <fileset id="myFileSet" dir="${src}">
    <exclude name='**/*svn' />
  </fileset>
  ...
  <target name="copy1">
    <copy todir="${target}/path/to/target/1">
      <fileset refid="myFileSet"/>
    </copy>
  </target>
  <target name="copy2">
    <copy todir="${target}/path/to/target/2">
      <fileset refid="myFileSet"/>
    </copy>
  </target>
</project>
40
Rich Seller

リッチの答え おそらく特定の問題には適していますが、Antでコードを再利用する一般的な方法は <macrodef>

<macrodef name="copythings">
  <attribute name="todir"/>
  <sequential>
    <copy todir="@{todir}">
      <fileset dir="${src}">
        <exclude name='**/*svn' />
      </fileset>
    </copy>
  </sequential>
</macrodef>

<copythings todir="/path/to/target1"/>
<copythings todir="/path/to/target2"/>
29
Dave Webb

すでに最初の回答に賛成していますが、マッパーを使用して複数の宛先にコピーすることもできます。

0
carej