2011-06-30 15 views
7

Tengo una tarea ant que incluye javascript incrustado. Me gustaría tener el objetivo fracasar o tener éxito basado en una lógica corro en el javascript:ant javascript failonerror

<target name="analyze"> 
    <script language="javascript"> 
    <![CDATA[ 
      importClass(java.io.File); 
      importClass(java.io.FileReader) 
      importClass(java.io.BufferedReader) 

      String.prototype.startsWith = function(str) { 
       return (this.indexOf(str) === 0); 
      } 

      String.prototype.endsWith = function(str) { 
       var lastIndex = this.lastIndexOf(str); 
       return (lastIndex != -1) && (lastIndex + str.length == this.length); 
      } 

      //setup the source directory 
      srcDir = project.getProperty("MY_HOME") + "/foo/src"; 

      if(srcDir.startsWith("/foo") { 
      //TARGET SHOULD PASS 
      } else { 
      //TARGET SHOULD FAIL 
      } 

    ]]> 
    </script> 
</target> 

Respuesta

7

Puede hacer que Ant salga a través de la API de Salida, pero eso arroja una excepción de compilación que dará lugar a un rastro de pila desordenado. El método más limpio sería la de establecer una propiedad en el Javascript a continuación probarlo utilizando el fail task:

Javascript:

project.setProperty("javascript.fail.message", "There was a problem"); 

Hormiga, inmediatamente después de la tarea de la escritura:

<fail if="javascript.fail.message" message="${javascript.fail.message}" /> 
+0

Martin, eso funciona exactamente como yo quiero. Has respondido a todas mis preguntas brillantemente, estoy asombrado. –

+0

Yo votaría esta respuesta 5 veces si pudiera. –

+0

@Amir - eres muy amable. Me alegro de ayudar, pero lamento no haber escrito una respuesta antes: el trabajo se interpuso. –

2

Otro objetivo:

<target name="failme"><fail/></target> 

Guión:

`project.executeTarget("failme");` 

No se ha probado. Documentation

+0

Esto parece inteligente. Cuando lo probé obtuve algo así como: WrappedException: no hay mensaje. ¿Alguna idea de qué hacer con eso? –

+0

Parece que funciona, pero arroja una ScriptException. Me gustaría que la secuencia de comandos se ejecute sin excepciones y que el objetivo falle. ¿Hay alguna manera de propocionar una booleana de respaldo a la hormiga de mi script? –

+0

Esto técnicamente funciona, +1. –