क्या कोई ANT टास्क है जो किसी दिए गए फ़ाइल के मौजूद होने पर ही किसी ब्लॉक को निष्पादित करेगा? मेरे पास समस्या है कि मेरे पास एक सामान्य चींटी स्क्रिप्ट है जिसे कुछ विशेष प्रसंस्करण करना चाहिए लेकिन केवल अगर कोई विशिष्ट कॉन्फ़िगरेशन फ़ाइल मौजूद है।
क्या कोई ANT टास्क है जो किसी दिए गए फ़ाइल के मौजूद होने पर ही किसी ब्लॉक को निष्पादित करेगा? मेरे पास समस्या है कि मेरे पास एक सामान्य चींटी स्क्रिप्ट है जिसे कुछ विशेष प्रसंस्करण करना चाहिए लेकिन केवल अगर कोई विशिष्ट कॉन्फ़िगरेशन फ़ाइल मौजूद है।
जवाबों:
<target name="check-abc">
<available file="abc.txt" property="abc.present"/>
</target>
<target name="do-if-abc" depends="check-abc" if="abc.present">
...
</target>
if
और unless
विशेषताएँ केवल उस लक्ष्य को सक्षम या अक्षम करती हैं, जो वे संलग्न हैं, अर्थात लक्ष्य की निर्भरता हमेशा निष्पादित होती है। अन्यथा यह उस लक्ष्य पर निर्भर करने के लिए काम नहीं करेगा जो आपके द्वारा जाँची जा रही संपत्ति को निर्धारित करता है।
<Available>
कि पदावनत किया गया है। : मैं इस का उपयोग किया है <target name="do-if-abc" if="${file::exists('abc.txt')}"> ... </target>
: जांच nant.sourceforge.net/release/0.85/help/functions/...
<available>
पदावनत किया गया है? 2: ${file::existst...}
लगता है कि चींटी (Apache ANT 1.9.7) के साथ काम नहीं कर रहा है
यह एक कोडिंग परिप्रेक्ष्य (एंट-कंट्रीब के साथ उपलब्ध: http://ant-contrib.sourceforge.net ) से थोड़ा अधिक समझ में आ सकता है :
<target name="someTarget">
<if>
<available file="abc.txt"/>
<then>
...
</then>
<else>
...
</else>
</if>
</target>
चींटी 1.8.0 के बाद से जाहिर तौर पर रिसोर्सएक्सिस्ट भी हैं
से http://ant.apache.org/manual/Tasks/conditions.html
अस्तित्व के लिए एक संसाधन का परीक्षण करता है। चींटी 1.8.0 के बाद से
परीक्षण करने के लिए वास्तविक संसाधन एक नेस्टेड तत्व के रूप में निर्दिष्ट है।
एक उदाहरण:
<resourceexists> <file file="${file}"/> </resourceexists>
मैं इस प्रश्न के उपरोक्त अच्छे उत्तर से उदाहरण को फिर से बनाने के बारे में था, और फिर मुझे यह मिला
चींटी 1.8.0 के रूप में, आप इसके बजाय संपत्ति विस्तार का उपयोग कर सकते हैं; सही (या पर या हाँ) का मान मद को सक्षम करेगा, जबकि असत्य (या बंद या नहीं) इसे अक्षम कर देगा। अन्य मूल्यों को अभी भी संपत्ति के नाम माना जाता है और इसलिए आइटम को केवल तभी सक्षम किया जाता है जब नामित संपत्ति को परिभाषित किया जाता है।
पुरानी शैली की तुलना में, यह आपको अतिरिक्त लचीलापन देता है, क्योंकि आप कमांड लाइन या मूल स्क्रिप्ट से स्थिति को ओवरराइड कर सकते हैं:
<target name="-check-use-file" unless="file.exists"> <available property="file.exists" file="some-file"/> </target> <target name="use-file" depends="-check-use-file" if="${file.exists}"> <!-- do something requiring that file... --> </target> <target name="lots-of-stuff" depends="use-file,other-unconditional-stuff"/>
चींटी मैनुअल से http://ant.apache.org/manual/properties.html#if+unless पर
उम्मीद है कि यह उदाहरण कुछ के लिए उपयोग का है। वे रिसोर्सएक्सिस्ट का उपयोग नहीं कर रहे हैं, लेकिन संभवतः आप कर सकते हैं? ...
if="${file.exists}"
साथ प्रतिस्थापित किया जाना चाहिए if="file.exists"
के रूप में if
और unless
, नहीं यह मूल्य नाम से संपत्ति का केवल अस्तित्व की जाँच करें।
मुझे लगता है कि यह इसी तरह के जवाब को संदर्भित करने के लायक है: https://stackoverflow.com/a/5288804/64313
यहाँ एक और त्वरित समाधान है। <available>
टैग का उपयोग करके इस पर अन्य विविधताएं संभव हैं :
# exit with failure if no files are found
<property name="file" value="${some.path}/some.txt" />
<fail message="FILE NOT FOUND: ${file}">
<condition><not>
<available file="${file}" />
</not></condition>
</fail>
DB_*/**/*.sql
यदि किसी वाइल्डकार्ड फ़िल्टर के लिए एक या अधिक फ़ाइलें मौजूद हैं, तो एक क्रिया करने के लिए यहां भिन्नता है। यही है, आप फ़ाइल का सही नाम नहीं जानते हैं।
यहां, हम " DB_ * नामक किसी भी उप-निर्देशिका में " * .sql "फ़ाइलों की तलाश कर रहे हैं " पुनरावृत्ति के लिए देख रहे हैं। आप अपनी आवश्यकताओं के लिए फ़िल्टर समायोजित कर सकते हैं।
NB: अपाचे चींटी 1.7 और उच्चतर!
यदि फ़ाइलों से मेल खाती है तो यहां संपत्ति सेट करने का लक्ष्य है:
<target name="check_for_sql_files">
<condition property="sql_to_deploy">
<resourcecount when="greater" count="0">
<fileset dir="." includes="DB_*/**/*.sql"/>
</resourcecount>
</condition>
</target>
यहाँ एक "सशर्त" लक्ष्य है जो केवल तभी चलता है जब फ़ाइलें मौजूद होती हैं:
<target name="do_stuff" depends="check_for_sql_files" if="sql_to_deploy">
<!-- Do stuff here -->
</target>
आप इसे फाइलों की एक सूची के साथ ऑपरेशन करने का आदेश देकर कर सकते हैं, जिनके नाम की आवश्यकता है। यह एक विशेष लक्ष्य बनाने की तुलना में बहुत आसान और प्रत्यक्ष है। और आपको किसी भी अतिरिक्त उपकरण की आवश्यकता नहीं है, बस शुद्ध चींटी।
<delete>
<fileset includes="name or names of file or files you need to delete"/>
</delete>
देखें: फ़ाइलसेट ।