2010-08-04 1 views
2

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

directories=dir1, dir2, dir3 

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

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

+0

Спасибо, Мартин! –

ответ

0

Что-то, как это должно работать:

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

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

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

+0

Большое спасибо за ваш ответ, однако, как вы заметили, это слишком много работы. Использование сценария для преобразования списка в шаблон более кратким. Я могу переключиться на список с разделителями с запятой, но почему это должно иметь значение? –

+0

Я думаю, это не так сильно отличается. Кажется, что можно сделать что-то с помощью коллекции ресурсов , но я не смог заставить ее работать: http://ant.apache.org/manual/Types/resources.html#restrict –

1

Как об использовании задачи 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.)

+0

Спасибо за ответ –

1

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

<multirootfileset basedirs="${directories}" includes="**/*">