Муравей: удалить, используя несколько паттернов имени в цикле
Вне каталога "res
"Я хочу удалить все файлы с именами, появляющимися в каталогах "platforms/${patern.dir}/res"
, где pattern.dir
является членом списка через запятую, указанного параметром pattern.dirs
Я хочу организовать это как цикл, так что количество каталогов для шаблонов имен может быть изменено без изменения цели.
Вот задача, которая должна сделать это:
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<target name="-clean-irrelevant" if="pattern.dirs" >
<for list="${pattern.dirs}" param="pattern.dir">
<delete verbose="true">
<fileset dir="res" includes="**/*" >
<present present="srconly"
targetdir="platforms/${pattern.dir}/res"/>
</fileset>
</delete>
</for>
</target>
Когда я запускаю задачу, я получаю сообщение
The following error occurred while executing this line:
for doesn't support the nested "delete" element.
Пробовал foreach, также вызывал отдельную задачу удаления - не повезло.
Есть ли способ реализовать задачу?
1 ответ
Решение
Вам нужно разместить sequential
элемент после for
цикл, который должен содержать задачи для каждой итерации.
Чтобы получить доступ к параметру списка pattern.dir
нужно использовать @{}
вместо ${}
,
<target name="-clean-irrelevant" if="pattern.dirs" >
<for list="${pattern.dirs}" param="pattern.dir">
<sequential>
<delete verbose="true">
<fileset dir="res" includes="**/*" >
<present present="srconly"
targetdir="platforms/@{pattern.dir}/res"/>
</fileset>
</delete>
</sequential>
</for>
</target>