2013-08-13 9 views
10

चींटी के भीतर, मेरे पास मैक्रोडफ़ है।चींटी सशर्त अगर मैक्रोडेफ़

मान लीजिए कि मुझे इस मैक्रोडफ़ का उपयोग करना है, और मैक्रोडेफ़ के अंदर एक वस्तु है जो मैं संपत्ति को iff चलाने के लिए चाहता हूं। प्रॉपर्टी मौजूद है और सच है, मैं क्या करूँ?

मैं वर्तमान में

<macrodef name="someName"> 
    <sequential> 
     <someMacroDefThatSetsTheProerty /> 
     <some:thingHereThatDependsOn if="special.property" /> 
    <sequential> 
</macrodef> 

कौन सा काम नहीं करता है - कुछ: thingHereThatDependsOn does not एक "अगर" विशेषता है, और मैं इसे करने के लिए एक नहीं जोड़ सकते।

antcontrib उपलब्ध नहीं है।

एक लक्ष्य के साथ मैं लक्ष्य "अगर" कर सकता हूं, मैक्रोडेफ़ के साथ मैं क्या कर सकता हूं?

+1

चींटी में सशर्त निष्पादन कार्य के स्तर पर काम नहीं करता है, यह लक्ष्य पर लागू होता है । शायद आप जो कुछ करने की कोशिश कर रहे हैं उसके बारे में कुछ और जानकारी दें। –

+0

आप चींटी contrib का उपयोग क्यों नहीं कर सकते? (या बीनशेल की तरह चींटी के भीतर एक पटकथा भाषा।) चींटी लक्ष्य में सशर्त तर्क के लिए उपयोग नहीं किया जाना है; केवल लक्ष्य के लिए ही। चींटी contrib इस के आसपास पाने के लिए एक तरीके के रूप में पेश किया गया था। चींटी contrib एक खुला स्रोत जार है। आप इसे क्यों उपलब्ध नहीं कर सकते? यह कहकर कि आप चींटी contrib का उपयोग नहीं कर सकते हैं, ऐसा लगता है कि "मुझे इस समस्या को हल करने की ज़रूरत है, लेकिन मुझे अपने कोड में किसी भी रिक्त स्थान का उपयोग करने की अनुमति नहीं है" –

+0

@ MarkO'Connor मैं बस सोच रहा था कि यह संभव था, ईमानदार हो। – bharal

उत्तर

14

चींटी 1.9.1 में और अधिक है, वहाँ अब if और unlessattributes की एक नई कार्यान्वयन है। यह हो सकता है कि आप क्या सोच रहे हैं।

सबसे पहले, आपको उन्हें अपने नेमस्पेस में रखना होगा। उन्हें अपने <project> हैडर में जोड़ें:

<project name="myproject" basedir="." default="package" 
    xmlns:if="ant:if" 
    xmlns:unless="ant:unless"> 

अब, आप लगभग किसी भी चींटी कार्य या उप इकाई में जोड़ सकते हैं:

<!-- Copy over files from special directory, but only if it exists --> 
<available property="special.dir.available" 
    file="${special.dir} type="dir"/> 

<copy todir="${target.dir}> 
    <fileset dir="${special.dir}" if:true="special.dir.available"/> 
    <fileset dir="${other.dir}"/> 
</copy> 

<!-- FTP files over to host, but only if it's on line--> 
<condition property="ftp.available"> 
    <isreachable host="${ftp.host}"/> 
</condition> 

<ftp server="${ftp.host}" 
    userid="${userid}" 
    passowrd="${password}" 
    if:true="ftp.available"> 
    <fileset dir=".../> 
</ftp> 
7

यह केवल तभी संभव है जब एएनटी "चीज़हेरटैट डिपेंडऑन" कार्य "अगर" विशेषता का समर्थन करता है।

ऊपर बताए अनुसार, एएनटी में सशर्त निष्पादन, आमतौर पर केवल लक्ष्य पर लागू होता है।

<target name="doSomething" if="allowed.to.do.something"> 
    .. 
    .. 
</target> 

<target name="doSomethingElse" unless="allowed.to.do.something"> 
    .. 
    .. 
</target> 

<target name="go" depends="doSomething,doSomethingElse"/> 
+0

पुष्टि के लिए धन्यवाद। – bharal

+5

यह अब सटीक नहीं है। चींटी 1.9.1 में नया 'if' और' जब तक 'गुण नहीं हैं। –

+0

@ डेविडडब्ल्यू। मुझे सही साबित होना है! इस नई सुविधा से अनजान था। –

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