2013-04-19 4 views
8

मैं Ant में मैक्रोडेफ़ को परिभाषित कर रहा हूं, और काम करने के लिए javascript का उपयोग कर रहा हूं। इस मामले में मैं timezone मान्य कर रहा हूं।चींटी से चल रहे जावास्क्रिप्ट में, आप तर्क मान कैसे प्राप्त कर सकते हैं?

<macrodef name="validateTimeZone"> 
    <attribute name="zone" /> 
    <sequential> 
     <echo>result: ${envTZResult}</echo> 
     <echo> validating timezone: @{zone}</echo> 
     <script language="javascript"><![CDATA[ 
      importClass(java.util.TimeZone); 
      importClass(java.util.Arrays); 
      var tz = project.getProperty("zone"); 
      println(" got attribute: " + tz); 
      var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known 
      project.setProperty("zoneIsValid", result); 
     ]]> 
     </script> 
    </sequential> 
</macrodef> 

समस्या project.getProperty() है पारित कर दिया विशेषताओं के मान को पुनः प्राप्त नहीं करता है। क्या किसी को पता है कि आप जावास्क्रिप्ट के भीतर से विशेषता का मूल्य कैसे प्राप्त कर सकते हैं?

+0

यह आपकी मदद कर सकते हैं: http://ant.apache.org/manual/Tasks/script.html - उदाहरण के आधे नीचे रास्ता देखो। – techfoobar

उत्तर

11

बाहर कर देता है मैं टैग की गलत प्रकार का उपयोग किया गया था, मूल्य के रूप में विशेषता के साथ एक संपत्ति बनाने के लिए है। चींटी कार्य को परिभाषित करने के लिए स्क्रिप्टिंग का उपयोग करने के लिए, मुझे scriptdef और macrodef का उपयोग नहीं करना चाहिए था। scriptdef के साथ आपके कार्य में विशेषताओं और नेस्टेड तत्वों तक पहुंचने के लिए पूर्वनिर्धारित वस्तुएं हैं।

यह चींटी में जावास्क्रिप्ट से गुण तक पहुँचने के लिए काम करता है:

<scriptdef name="validateTimeZone" language="javascript"> 
    <attribute name="zone" /> 
    <![CDATA[ 
     importClass(java.util.TimeZone); 
     importClass(java.util.Arrays); 
     var tz = attributes.get("zone"); //get attribute defined for scriptdef 
     println(" got attribute: " + tz); 
     var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known 
     project.setProperty("zoneIsValid", result); 
    ]]> 
</scriptdef> 
5

बेस्ट अर्थात

<macrodef name="validateTimeZone"> 
    <attribute name="zone" /> 
    <sequential> 
     <echo>result: ${envTZResult}</echo> 
     <echo> validating timezone: @{zone}</echo> 
     <!-- edit use local with ant 1.8.x --> 
     <local name="zone"/> 
     <property name="zone" value="@{zone}"/> 
     <script language="javascript"><![CDATA[ 
      importClass(java.util.TimeZone); 
      importClass(java.util.Arrays); 
      var tz = project.getProperty("zone"); 
      println(" got attribute: " + tz); 
      var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known 
      project.setProperty("zoneIsValid", result); 
     ]]> 
     </script> 
    </sequential> 
</macrodef> 
+1

यह एक अच्छा विचार है, लेकिन दुर्भाग्य से केवल पहले आमंत्रण के लिए काम करता है। गुण केवल एंटी में एक बार सेट किए जा सकते हैं, इसलिए पहले रन के बाद 'जोन' संपत्ति हमेशा एक ही मान रखेगी। – Tim

+3

निश्चित रूप से, लेकिन चींटी 1.8> = के साथ आप स्थानीय कार्य का उपयोग कर सकते हैं, संपादन देखें – Rebse

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

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