Ant: скопируйте тот же набор файлов в несколько мест
Мне нужен Ant script, который скопирует одну папку в несколько других мест. Как хороший послушный программист, я не хочу повторять себя. Есть ли способ сделать набор файлов следующим образом:
<copy todir="${target}/path/to/target/1">
<fileset dir="${src}">
<exclude name='**/*svn' />
</fileset>
</copy>
И сохранение fileset
в переменной, чтобы ее можно было повторно использовать?
Ответы
Ответ 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 для копирования в несколько пунктов назначения.