2013-03-06 2 views
0

Мы хотим, чтобы петля через структуру каталогов в муравье без использования foreach. Есть ли элегантный способ сделать то же самое?Петля через структуру каталогов в муравьином

+0

Что вы пытаетесь сделать со структурой каталогов? Если вы делаете что-то вроде создания муравьевого проекта в каждом каталоге, вы можете получить необходимую функциональность с помощью [subant] (http://ant.apache.org/manual/Tasks/subant.html) – David

ответ

3

apply task может перебрать множество каталогов или файлов

<target name="run-apply"> 
    <apply executable="echo"> 
     <dirset dir="src"/> 
    </apply> 
</target> 

лично мне нравится groovy ANT task

<target name="run-groovy"> 
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/> 
    <dirset id="dirs" dir="src"/> 
    <groovy> 
     project.references.dirs.each { 
      ant.echo it 
     } 
    </groovy> 
</target> 

установка целевой баночку легко автоматизированном:

<target name="install-groovy"> 
    <mkdir dir="${user.home}/.ant/lib"/> 
    <get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.1/groovy-all-2.1.1.jar"/> 
</target> 

Наконец, если вы итерации через другой файл сборки es, задача subant очень полезна:

<target name="run-subant"> 
    <subant> 
     <fileset dir="src" includes="**/build.xml"/> 
    </subant> 
</target> 
+0

apply не будет работать для меня, потому что я не хочу запускать новый процесс для каждого элемента. –

+0

@ConstantinoCronemberger Fine .... Отличная задача - более эффективный механизм для циклирования. –

+0

На самом деле я использую maven-antrun-plugin, и в этом случае я могу посмотреть в groovy-maven-plugin. –

0

Короткий ответ: Не совсем. Есть способы обойти это, но я предпочитаю задачу ant-contrib <for/> для ясности и простоты. С помощью задачи <local/> вы можете теперь локализовать значения переменных. Раньше вам приходилось использовать задачу <var/> от ant-contrib, чтобы сбросить значения, чтобы вы могли перебирать их снова и снова.

<for param="directory"> 
    <fileset dir="${some.dir}"/> 
    <sequential> 
     <local name="foo"/> 
     <local name="bar"/> <!-- Properties that may change with each iteration --> 
     <!-- Here be dragons --> 
    </sequential> 
</for> 

Это чистый, простой и понятный. Большая проблема, с которой многие люди сталкиваются с Ant Contrib, заключается в том, что не каждый может установить ее в своем каталоге $ANT_HOME/lib. Достаточно далеко. Итак, если вы используете ant-contrib, поставьте его как часть своего проекта.

Я положу муравей-вно банку в ${basedir}/antlib/antcontrib и затем поместить это в моей программе:

<taskdef resource="net/sf/antcontrib/antlib.xml"> 
    <classpath> 
     <fileset dir="${basedir}/antlib/antcontrib"/> 
    </classpath> 
</taskdef> 

Теперь, когда кто-то проверяет мой проект, они имеют муравей-вно уже установлен (так как внутри мой проект) и доступный (поскольку я указываю свою задачу <taskdef> в месте расположения ant-contrib.jar в моем проекте).

+0

необходимо обернуть в элемент pstanton