barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 7 сентября 2012 г.

Ant: выполнение действий над каждым файлом из набора

Задача:

В билдфайле ant над каждым файлом из набора (заданного с помощью <fileset/>) выполнить некоторое действие или последовательность действий.

Решение:

Один из вариантов -  воспользоваться библиотекой Ant-Contrib (скачать её, а также почитать документацию можно тут: http://ant-contrib.sourceforge.net/, я использовал версию 0.6). Она предоставляет задачу <foreach/>, позволяющую задать набор файлов вложенным элементом <path/> и вызвать для каждого файла указанную цель, передав ей имя файла в качестве параметра. Вот небольшой пример:
<taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach"
             classpath="path/to/ant-contrib-0.6.jar"/>

<target ...>
<foreach target="mytarget" param="myfile">
<path>
<fileset dir="${basedir}">
<include name="*.jar"/>
</fileset>    
</path>
</foreach>
</target>

<target name="mytarget">
<echo message="filename is ${myfile}" />
</target>
Здесь foreach проходит по всем jar-файлам из базовой директории, и для каждого вызывает цель "mytarget", передавая ей абсолютный путь к файлу через параметр "myfile".

PS В принципе, в ant есть встроенная задача <apply/>, но она умеет выполнять для каждого файла из набора только внешние команды, а не внутренние цели.

Комментариев нет:

Отправить комментарий