Как мне создать набор файлов из списка каталогов, разделенных запятыми, в Ant?

В цели Ant я получаю свойство, содержащее список каталогов, которые будут включены в дальнейшие действия (копирование, фильтрация и т. Д.). Выглядит это так:

directories=dir1, dir2, dir3

Мне нужен способ преобразовать этот список в набор файлов или набор шаблонов, который выбирает все файлы в этих каталогах.

Я знаю, что могу использовать скрипт для генерации строк шаблона, а затем использовать его в «include» или «exclude», но есть ли способ избежать скриптов?


person Max Kosyakov    schedule 04.08.2010    source источник


Ответы (3)


Обратите внимание, что в Ant 1.9.4 появилась новая конструкция ‹multirootfileset› который обеспечивает эту функциональность, даже если каталоги не являются братьями и сестрами:

<multirootfileset basedirs="${directories}" includes="**/*">
person Patrice M.    schedule 28.06.2015

Как насчет использования задачи antcontrib propertyregex для преобразования списка, разделенного запятыми, в подстановочные знаки, подходящие для набора файлов?

<property name="directories" value="dir1, dir2, dir3" />

<property name="wildcard" value="${file.separator}**${file.separator}*" />
<propertyregex property="my_pattern"
               input="${directories}" 
               regexp=", " 
               replace="${wildcard}," />

На данный момент у нас есть:

my_pattern=dir1/**/*,dir2/**/*,dir3

Это можно использовать с дополнительным суффиксом подстановочного знака, чтобы получить полный набор файлов:

<fileset dir="." id="my_fileset" includes="${my_pattern}${wildcard}" />

(Сложность ${wildcard} состоит в том, чтобы обеспечить переносимость между файловыми системами unix и Windows, вы можете использовать /**/*, если вы чистый unix.)

person martin clayton    schedule 03.10.2010

Примерно так должно работать:

<dirset includes="${directories}"/>

Да, dirset не fileset. Однако этого может быть достаточно, иначе вы, вероятно, можете использовать for или foreach из ant-contrib для итерации по каталогам в вашей цели. Вы также можете определить ResourceCollection на основе dirset. Это может помочь узнать, какими будут "дальнейшие действия".

Однако кажется, что это слишком много работы ...

person Zac Thompson    schedule 04.08.2010
comment
Однако большое спасибо за ваш ответ, как вы заметили, это слишком много работы. Использование скрипта для преобразования списка в шаблон более лаконично. Я могу переключиться на список, разделенный точками с запятой, но почему это должно иметь значение? - person Max Kosyakov; 05.08.2010
comment
Да, думаю, это не имеет большого значения. Кажется, что можно что-то сделать с коллекцией ресурсов ‹restrict›, но мне не удалось заставить ее работать: ant.apache.org/manual/Types/resources.html#restrict. - person Zac Thompson; 06.08.2010