2010-01-27 6 views
17

Ho alcuni file:Conversione di un set di file Ant a più applicare args

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

In un apply task Ant, voglio passare la lista dei file come argomenti:

<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> 

Questo funziona bene , ma cosa succede se voglio selezionare l'elenco di file in modo dinamico, utilizzando un set di file:

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

Come posso convertire questo set di file a arg elementi - uno per file? Qualcosa di simile:

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

invece di

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

(Questo esempio non funziona perché arg non supporta set di file )

risposta

26

Ecco un esempio che illustra l'uso dell'attività pathconvert.

Il percorso convertito viene passato all'eseguibile utilizzando <arg line />.

Ciò presuppone nessuno spazio nei percorsi dei file *.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> 

Se si possono incontrare spazi questo dovrebbe fare: come sopra, ma il cambiamento (si spera ovvio che le linee) a:

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

e

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

ho pensato che non era possibile mix e ma sembra essere OK. Questa è una buona soluzione e funziona (non ho testato il caso con spazi nei nomi). – Jmini

+0

Testato e funziona per me. – ViToni

Problemi correlati