2011-01-25 17 views
8

Quiero escribir una macro de ant que llamará a la tarea de falla si el atributo proporcionado contiene una cierta cadena. La única forma en que sé cómo hacer una comparación de cadenas en una hormiga es usando javascript. Tengo algo como esto:Ant: cómo fallar si la propiedad contiene una cierta cadena

<macrodef name="check-for-error"> 
    <attribute name="input"/> 
    <sequential> 
     <echo message="@{input}"/> 
     <script language="javascript"> 
      <![CDATA[ 
      var response= "@{input}"; 
      if(response.indexOf("FAIL") !=-1){ 
       project.setProperty("error","true"); 
      } 
      ]]> 
     </script> 
     <fail message="INPUT FAILED" if="${error}"/> 
    </sequential> 
</macrodef> 

El problema con este enfoque es que estoy estableciendo una propiedad que es global dentro del Javascript, y la hormiga no le permite restablecer una propiedad. Sé que la hormiga tiene la capacidad de establecer propiedades locales. ¿Cómo puedo acceder a las propiedades locales desde javascript? ¿O hay una mejor manera de hacer esto todos juntos?

Respuesta

8
<condition property="missing-properties"> 
    <matches pattern="YOUR-PATTERN" string="${THE-ATTRIBUTE}"/> 
</condition> 
<fail message="Input failed!" if="missing-properties"/> 
+1

esto funcionó para mí con la versión 1.8.2 de hormigas, gracias! – larham1

1

Todo lo que necesita hacer para localizar la propiedad es llamar al local task para ello antes de la Javascript.

Por ejemplo:

<sequential> 
    <echo message="@{input}"/> 
    <local name="error"/>  <!-- Added this line. --> 
    <script language="javascript"> 
    ... 

Además, en cambio, podría localizar la propiedad enitrely en Javascript:

<script language="javascript"><![CDATA[ 
    localiser = project.createTask("local"); 
    localiser.setName("error"); 
    localiser.perform(); 

    ... 
Cuestiones relacionadas