2011-01-25 17 views
8

है तो मैं असफल कैसे हो सकता हूं, मैं एक एंटी मैक्रो लिखना चाहता हूं जो विफल कार्य को कॉल करेगा यदि आपूर्ति की विशेषता में एक निश्चित स्ट्रिंग है। एकमात्र तरीका है कि मैं जानता हूं कि चींटी तुलना में चींटी तुलना कैसे करें जावास्क्रिप्ट का उपयोग कर।चींटी: अगर संपत्ति में एक निश्चित स्ट्रिंग

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

इस दृष्टिकोण के साथ समस्या यह है कि मैं एक संपत्ति है कि जावास्क्रिप्ट के अंदर वैश्विक है सेट कर रहा हूं, और चींटी आप एक संपत्ति रीसेट नहीं करता है: मैं कुछ इस तरह की है। मुझे पता है कि चींटी में स्थानीय गुणों को स्थापित करने की क्षमता है। मैं जावास्क्रिप्ट के भीतर से स्थानीय गुणों का उपयोग कैसे कर सकता हूं? या क्या यह सब एक साथ करने का एक बेहतर तरीका है?

उत्तर

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

इस चींटी संस्करण 1.8.2, धन्यवाद के साथ मेरे लिए काम किया! – larham1

1

सभी कि आप संपत्ति स्थानीय बनाना करने की जरूरत है इसके लिए local task पहले जावास्क्रिप्ट को कॉल करने के लिए है।

उदाहरण के लिए:

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

इसके अलावा, बजाय, आप संपत्ति enitrely जावास्क्रिप्ट में स्थानीय बनाना सकता है:

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

    ... 
संबंधित मुद्दे