2011-01-25 16 views
8

Chcę napisać makro ant, które wywoła zadanie fail, jeśli dostarczony atrybut zawiera określony ciąg znaków. Jedynym sposobem, w jaki potrafię porównywać łańcuchy w mrówce, jest użycie javascript. Mam coś takiego:Ant: jak zawieść, jeśli właściwość zawiera określony ciąg

<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> 

Problem z tego podejścia jest to, że mam ustawienie właściwość, która jest globalnym wewnątrz javascript i mrówka nie pozwala zresetować właściwość. Wiem, że mrówka ma możliwość ustawiania właściwości lokalnych. Jak uzyskać dostęp do lokalnych właściwości z poziomu javascript? Czy istnieje lepszy sposób, aby to wszystko razem?

Odpowiedz

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

ten pracował dla mnie z ant wersji 1.8.2, dzięki! – larham1

1

Wszystko, co trzeba zrobić, aby zlokalizować właściwość jest wywołanie local task dla niego przed JavaScript.

Na przykład:

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

Ponadto, zamiast, można zlokalizować właściwość enitrely w JavaScript:

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

    ... 
Powiązane problemy