2008-09-17 16 views
19

मेरे पास एक चींटी स्क्रिप्ट है जो 'copy' task का उपयोग करके एक कॉपी ऑपरेशन करती है। यह विंडोज के लिए लिखा गया था, और 'todir' तर्क के रूप में एक हार्डकोडेड सी: \ पथ है। मुझे लगता है कि 'exec' कार्य में ओएस तर्क है, क्या ओएस पर आधारित प्रतिलिपि बनाने का एक समान तरीका है?क्या मैं चींटी प्रतिलिपि कार्य ओएस-विशिष्ट बना सकता हूं?

उत्तर

31

मैं एक संपत्ति में पथ डालने की सिफारिश करता हूं, फिर वर्तमान ओएस के आधार पर सशर्त संपत्ति को सेट करता हूं।

<condition property="foo.path" value="C:\Foo\Dir"> 
    <os family="windows"/> 
</condition> 
<condition property="foo.path" value="/home/foo/dir"> 
    <os family="unix"/> 
</condition> 

<fail unless="foo.path">No foo.path set for this OS!</fail> 

साइड लाभ के रूप में, एक बार यह संपत्ति में हो जाने पर आप एंट स्क्रिप्ट को संपादित किए बिना इसे ओवरराइड कर सकते हैं।

+0

क्या एंटी में पथ घोषित करने का कोई तरीका नहीं है जिसे विंडोज और लिनक्स के तहत समान रूप से माना जाता है? मैं सिर्फ उत्सुक हूँ। –

1

आप एक चर का उपयोग नहीं कर सकते हैं और इस प्रकार के आधार पर इसे आवंटित कर सकते हैं? आप इसे build.properties फ़ाइल में डाल सकते हैं। या आप इसे condition का उपयोग करके असाइन कर सकते हैं।

2

आप अलग अलग प्रतिलिपि कार्यों के शाखा हालत काम इस्तेमाल कर सकते हैं ... चींटी के मैनुअल से:

<condition property="isMacOsButNotMacOsX"> 
<and> 
    <os family="mac"/> 

    <not> 
    <os family="unix"/> 

    </not> 
</and> 

1

एक चर अपने ऑपरेशन के रूट फ़ोल्डर है कि घोषित। प्रतिलिपि कार्य सहित, उस चर के साथ अपने फ़ोल्डरों को उपसर्ग करें।

एक सशर्त का उपयोग कर ओएस पर आधारित चर सेट करें, या इसे एंटी स्क्रिप्ट के लिए तर्क के रूप में पास करें।

6

ओएस विशिष्ट चर के पहले पोस्ट किए गए सुझाव काम करेंगे, लेकिन कई बार आप केवल "सी:" उपसर्ग को छोड़ सकते हैं और आगे स्लैश (यूनिक्स शैली) फ़ाइल पथ का उपयोग कर सकते हैं और यह विंडोज और यूनिक्स सिस्टम दोनों पर काम करेगा।

तो, आप फ़ाइलों की प्रतिलिपि बनाने "C:/tmp" करना चाहते हैं तो विंडोज पर और यूनिक्स पर "/ tmp", आप की तरह कुछ इस्तेमाल कर सकते हैं:

<copy todir="/tmp" overwrite="true" > 
     <fileset dir="${lib.dir}"> 
      <include name="*.jar" /> 
     </fileset> 
</copy> 

आप/निर्धारित करने की आवश्यकता चाहते हैं, तो

<condition property="root.drive" value="C:/" else="/"> 
     <os family="windows" /> 
    </condition> 
    <copy todir="${root.drive}tmp" overwrite="true" > 
      <fileset dir="${lib.dir}"> 
       <include name="*.jar" /> 
      </fileset> 
    </copy> 
0

चींटी-योगदान < osfamily/> कार्य है: एक सशर्त ओएस के आधार पर पथ, यह रूप में सरल किया जा सकता। यह ओएस के परिवार को एक संपत्ति के सामने उजागर करेगा (जिसे आप नाम निर्दिष्ट करते हैं)। यह कुछ लाभ का हो सकता है।

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