2010-01-27 11 views
17

Tengo algunos archivos:Conversión de un conjunto de archivos Ant para múltiples aplicar args

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

En una apply tarea Ant, quiero pasar a la lista de archivos como argumentos:

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

Esto funciona bien , pero lo que si quiero recoger la lista de archivos de forma dinámica, utilizando un conjunto de archivos:

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

¿Cómo puedo convertir este conjunto de archivos a arg elementos - uno por archivo? Algo así como:

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

en lugar de

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

(Este ejemplo no funciona porque arg no es compatible conjunto de archivos )

Respuesta

26

He aquí un ejemplo que ilustra el uso de la tarea pathconvert.

La ruta convertida se pasa al ejecutable usando <arg line />.

Esto supone ningún espacio en los caminos de sus *.txt archivos.

<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 puede encontrarse con espacios esto debe hacer: que el anterior, pero el cambio (esperemos obvio qué líneas) a:

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

y

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

pensé que no era posible mezclar y pero parece estar bien. Esta es una buena solución y funciona (no he probado el caso con espacios en los nombres). – Jmini

+0

probado y funciona para mí. – ViToni

Cuestiones relacionadas