simulador - ant turnos
sutilezas sutiles del error fallido (2)
Tengo un código ant que inicia una compilación de lanzamiento en todos los subdirectorios:
<target name="all-release" >
<subant target="sub-release" failonerror="true">
<fileset dir="." includes="*/build.xml" />
</subant>
</target>
Tal como está escrito, si falla cualquier compilación individual, todas las versiones fallarán rápidamente (ninguna de las versiones posteriores tendrá éxito. Si cambio failonerror = "false", la versión completa tendrá éxito todo el tiempo. -los constructores son independientes, entonces lo que realmente quiero es:
ejecutar todas las compilaciones de subdesarrollo, y luego tener fallas en todas las versiones posteriores si falla una o más sub-versiones (idealmente con un bonito mensaje de error sobre qué compilaciones fallaron).
¿Algunas ideas?
Te sugiero que veas las extensiones disponibles en las tareas ant-contrib .
La tarea ''para'' probablemente pueda adaptarse para cumplir con sus requisitos.
Su objetivo de "liberación total", con la taskdef ant-contrib, podría verse así:
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<target name="all-release">
<for keepgoing="true" param="file">
<path>
<fileset dir="." includes="*/build.xml" />
</path>
<sequential>
<ant antfile="@{file}" target="sub-release" />
</sequential>
</for>
</target>
Usando algunas otras características ant-contrib es posible obtener la lista de fallas.
Registro de muestra desde arriba build.xml:
$ ant all-release
Buildfile: build.xml
all-release:
[echo] /work/Scratch/dir1/build.xml
sub-release:
[echo] dir1
[echo] /work/Scratch/dir2/build.xml
sub-release:
[echo] dir2
[for] /work/Scratch/dir2/build.xml: The following error occurred while executing this line:
[for] /work/Scratch/build.xml:17: The following error occurred while executing this line:
[for] /work/Scratch/dir2/build.xml:6: dir2 failed
[echo] /work/Scratch/dir3/build.xml
sub-release:
[echo] dir3
BUILD FAILED
/work/Scratch/build.xml:11: Keepgoing execution: 1 of 3 iterations failed.
Total time: 0 seconds
Las extensiones Antelope Ant tienen un comando try-catch
que se puede usar para lo que necesita:
<taskdef name="try" classname="ise.antelope.tasks.TryTask"/>
....
<try break="false" printmessage="true" >
<antcall target="xmlValidate" />
<antcall target="runJunit" />
<antcall target="..." />
<catch>
<property name="haderrors" value="true"/>
</catch>
</try>
<fail message="FAILED" if="haderrors" />
break=false
continuemos el siguiente comando después de fallar. Pero los objetivos fallidos establecen la propiedad de los haderrors
que se comprueba al final. Lo usé mucho para crear trabajos (y funciona bien) pero no estoy seguro de que funcione para <fileset>
dentro de <subant>
. Tal vez <subant>
enumerar todas las llamadas <subant>
explícitamente.