2009-07-02 14 views
17

मैं वितरण के लिए अपने ग्रहण-आधारित अनुप्रयोग को एकत्रित करने के लिए एक चींटी निर्माण स्क्रिप्ट का उपयोग कर रहा हूं।एंटी के उपलब्ध कमांड में वाइल्डकार्ड का उपयोग कैसे करें

बिल्ड का एक चरण यह जांचना है कि निर्माण पुस्तकालयों में सही पुस्तकालय मौजूद हैं। मैं वर्तमान में इसके लिए चींटी कमांड का उपयोग करता हूं। दुर्भाग्यवश, जब भी मैं एक नए ग्रहण निर्माण पर स्विच करता हूं (जब संस्करण संख्या अपडेट हो जाती है) मुझे प्रत्येक बार स्क्रिप्ट में संशोधन करना होगा।

मुझे संस्करण संख्याओं की जांच करने की आवश्यकता नहीं है, मुझे बस फ़ाइल की जांच करने की आवश्यकता है।

org.eclipse.rcp_3.5.0.* 
बजाय

:

org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11 

चींटी का उपयोग कर

तो, मैं के लिए जाँच करते हैं?

चियर्स, इयान

उत्तर

22

तुम्हारा मतलब है, की तरह कुछ (pathconvert task के आधार पर, this idea के बाद):

<target name="checkEclipseRcp"> 
    <pathconvert property="foundRcp" setonempty="false" pathsep=" "> 
    <path> 
     <fileset dir="/folder/folder/eclipse" 
       includes="org.eclipse.rcp_3.5.0.*" /> 
    </path> 
    </pathconvert> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
+0

कि सही लगता है - मैं इसे एक कोशिश देने के लिए मर रहा हूँ। अगर केवल 3 साल पहले मैंने सवाल पूछा था, तो मैंने बहुत समय बचाया होगा। चीयर्स, इयान – ianmayo

0

pathconvert काम शायद ज्यादातर मामलों में जाने के लिए पसंदीदा तरीका है। लेकिन जब निर्देशिका पेड़ बहुत बड़ा होता है और यह ईकोप्रोपर्टीज कार्य का उपयोग करता है तो यह एक छोटी सी समस्या पैदा करता है। एक बहुत बड़ी निर्देशिका पेड़ के साथ, pathconvert द्वारा उत्पन्न स्ट्रिंग विशाल हो सकता है। फिर echoproperties भारी स्ट्रिंग स्प्रे, उत्पादन के साथ काम करने के लिए और अधिक कठिन बनाते हैं। मुझे लगता है कि एक संपत्ति "1" के लिए सेट अगर वहाँ निर्देशिका में फ़ाइलों हैं बनाता है लिनक्स पर एक macrodef का उपयोग करें:

<macrodef name="chkDirContents" > 
    <attribute name="propertyName" /> 
    <attribute name="dirPath" /> 
    <attribute name="propertyFile" /> 
    <sequential> 
     <exec executable="sh" dir="." failonerror="false" > 
      <arg value="-c" /> 
      <arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' /> 
     </exec> 
    </sequential> 
</macrodef> 

<target name="test" > 
    <tempfile destdir="." property="temp.file" deleteonexit="true" /> 
    <chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" /> 
    <property file="${temp.file}" /> 

    <echoproperties/> 
</target> 

"परीक्षण" लक्ष्य निष्पादित अगर वहाँ में फ़ाइलें हैं निम्नलिखित echoproperties लाइन उत्पन्न होगा ./ target_dir/निर्देशिका:

[echoproperties] files.exist=1 

क्या "परीक्षण" करता है: यह एक अस्थायी फ़ाइल नाम, $ {temp.file}, जिसे बाद में एक संपत्ति फ़ाइल के रूप में इस्तेमाल किया जा सकता उत्पन्न करता है। फिर यह मैक्रोडेफ़ निष्पादित करता है, जो कि डायरपाथ निर्देशिका की सामग्री को जांचने के लिए खोल को कॉल करता है। अगर दीपपथ में कोई भी फाइल या निर्देशिकाएं हैं, तो यह संपत्ति नाम संपत्ति को अस्थायी फ़ाइल में 1 का मान निर्दिष्ट करती है। यह फ़ाइल को पढ़ता है और फ़ाइल में दी गई संपत्ति सेट करता है। अगर फ़ाइल खाली है, तो कोई संपत्ति परिभाषित नहीं की जाती है।

ध्यान दें कि वांछित अगर मैक्रोडेफ़ की अगली कॉल के लिए अस्थायी फ़ाइल का पुन: उपयोग किया जा सकता है। दूसरी तरफ, निश्चित रूप से, संपत्ति सेट होने के बाद, यह अपरिवर्तनीय है।

+0

आप में से बहुत उदारता में सुधार करने और सुधार की पेशकश करने के लिए। अगर केवल 4 साल पहले इस सुधार के बारे में मुझे पता था, जब मैंने टिप्पणी की कि मुझे 3 साल पहले बेस समाधान के बारे में पता था। कौन जानता है कि मैं 5 साल के समय में क्या सुधार कर सकता हूं? – ianmayo

7

resourcecount शर्त के साथ एक थोड़ा छोटे और अधिक स्पष्ट दृष्टिकोण:

<target name="checkEclipseRcp"> 
    <condition property="foundRcp"> 
     <resourcecount when="greater" count="0"> 
      <fileset file="/folder/folder/eclipse/org.eclipse.rcp_3.5.0.*"/> 
     </resourcecount> 
    </condition> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
संबंधित मुद्दे