2010-01-27 14 views
17

J'ai quelques fichiers:Conversion d'une fourmi fileset à plusieurs appliquer args

dir/foo.txt 
dir/bar.txt 
dir/foobar.txt 

Dans une tâche apply Ant, je veux transmettre la liste des fichiers comme arguments:

<target name="atask"> 
    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in"/> 
     <srcfile/> 
     <arg value="dir/foo.txt"/> 
     <arg value="dir/bar.txt"/> 
     <arg value="dir/foobar.txt"/> 

     <fileset dir="${list.dir}" includes="*.list"/> 
    </apply> 
</target> 

Cela fonctionne bien , mais si je veux choisir la liste des fichiers dynamiquement, en utilisant un ensemble de fichiers:

<fileset dir="dir" includes="*.txt"/> 

Comment puis-je convertir cette fileset à arg éléments - un par fichier? Quelque chose comme:

<arg> 
    <fileset dir="dir" includes="*.txt"/> 
</arg> 

au lieu de

<arg value="dir/foo.txt"/> 
<arg value="dir/bar.txt"/> 
<arg value="dir/foobar.txt"/> 

(Cet exemple ne fonctionne pas parce que arg ne supporte pas fileset)

Répondre

26

Voici un exemple illustrant l'utilisation de la tâche pathconvert.

Le chemin converti est transmis à l'exécutable à l'aide de <arg line />.

Ceci n'assume aucun espace dans les chemins de vos fichiers *.txt.

<target name="atask"> 
    <fileset dir="dir" id="myTxts"> 
     <include name="*.txt" /> 
    </fileset> 
    <pathconvert property="cmdTxts" refid="myTxts" pathsep=" " /> 

    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in" /> 
     <srcfile /> 
     <arg line="${cmdTxts}" /> 

     <fileset dir="${list.dir}" includes="*.list" /> 
    </apply> 
</target> 

Si vous pouvez rencontrer des espaces ce qui devrait faire: comme ci-dessus, mais le changement (je l'espère évident que les lignes) à:

<pathconvert property="cmdTxts" refid="myTxts" pathsep="' '" /> 

et

 <arg line="'${cmdTxts}'"/> 
+0

Je pensais qu'il était impossible de mélangez et mais cela semble être OK. C'est une bonne solution de contournement et cela fonctionne (je n'ai pas testé le cas avec des espaces dans les noms). – Jmini

+0

Testé et fonctionne pour moi. – ViToni