ant arguments fileset

Convertir un conjunto de archivos Ant en múltiples args de aplicación



arguments fileset (1)

Tengo algunos archivos:

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

En una tarea de apply Ant, quiero pasar 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 ¿qué pasa si quiero elegir 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 en elementos arg , uno por archivo? Algo 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 admite el conjunto de archivos )


Aquí hay un ejemplo que ilustra el uso de la tarea pathconvert .

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

Esto no asume espacios en las rutas de tus archivos *.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 pudiera encontrar espacios, debería hacerlo: como se muestra arriba, pero cambie (con suerte, qué líneas):

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

y

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