Подтвердить что ты не робот

Ant: скопируйте тот же набор файлов в несколько мест

Мне нужен Ant script, который скопирует одну папку в несколько других мест. Как хороший послушный программист, я не хочу повторять себя. Есть ли способ сделать набор файлов следующим образом:

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

И сохранение fileset в переменной, чтобы ее можно было повторно использовать?

4b9b3361

Ответ 1

Объявите атрибут 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>

Ответ 2

Богатый ответ, вероятно, лучше для вашей конкретной проблемы, но общий способ повторного использования кода в 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"/>

Ответ 3

Упрощенный первый ответ уже, но вы также можете использовать mapper для копирования в несколько пунктов назначения.