Муравей: удалить, используя несколько паттернов имени в цикле

Вне каталога "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>
Другие вопросы по тегам