Supongamos que tengo alguna tarea Ant, digamos javac o junit, si cualquiera de las tareas falla, quiero ejecutar una tarea, pero si tienen éxito, no.¿Cómo ejecuto un comando Ant si una tarea falla?
¿Alguna idea de cómo hacer esto?
Supongamos que tengo alguna tarea Ant, digamos javac o junit, si cualquiera de las tareas falla, quiero ejecutar una tarea, pero si tienen éxito, no.¿Cómo ejecuto un comando Ant si una tarea falla?
¿Alguna idea de cómo hacer esto?
En su objetivo junit, por ejemplo, puede establecer la failureProperty
:
<target name="junit" depends="compile-tests" description="Runs JUnit tests">
<mkdir dir="${junit.report}"/>
<junit printsummary="true" failureProperty="test.failed">
<classpath refid="test.classpath"/>
<formatter type="xml"/>
<test name="${test.class}" todir="${junit.report}" if="test.class"/>
<batchtest fork="true" todir="${junit.report}" unless="test.class">
<fileset dir="${test.src.dir}">
<include name="**/*Test.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>
</target>
A continuación, cree un objetivo que sólo se ejecuta si la propiedad test.failed
está establecido, pero fracasa al final:
<target name="otherStuff" if="test.failed">
<echo message="I'm here. Now what?"/>
<fail message="JUnit test or tests failed."/>
</target>
Por último, atarlos juntos:
<target name="test" depends="junit,otherStuff"/>
Luego solo llame al objetivo test
para ejecutar sus pruebas JUnit. Se ejecutará el objetivo junit
. Si falla (falla o error), se establecerá la propiedad test.failed
y se ejecutará el cuerpo del objetivo otherStuff
.
La tarea javac admite los atributos failonerror
y errorProperty
, que se pueden usar para obtener un comportamiento similar.
ant-contrib tiene una tarea trycatch.
Establezca una propiedad en la tarea para la que desea verificar el error y luego escriba la segunda tarea para que se ejecute si la propiedad no está establecida. No recuerdo las sintaxis exactas de build.xml, o daría ejemplos.
como se mencionó desde Kai:
ant-contrib tiene una tarea TryCatch.
Pero necesita la versión 1.0b3 más reciente. Y luego use
<trycatch>
<try>
... <!-- your executions which may fail -->
</try>
<catch>
... <!-- execute on failure -->
<throw message="xy failed" />
</catch>
</trycatch>
El truco consiste en arrojar un error nuevamente para indicar una compilación rota.
Lamentablemente, eso no funcionará, ya que todavía quiero que falle la compilación. – tomjen