2009-07-22 20 views
30

मुझे एक चींटी स्क्रिप्ट चाहिए जो एक फ़ोल्डर को कई अन्य स्थानों पर कॉपी करेगी। एक अच्छा आज्ञाकारी प्रोग्रामर के रूप में, मैं खुद को दोहराना नहीं चाहता हूं। वहाँ इस तरह की एक फ़ाइलसेट लेने का कोई तरीका है:चींटी: एक ही फाइलसेट को कई स्थानों पर कॉपी करें

<copy todir="${target}/path/to/target/1"> 
    <fileset dir="${src}"> 
     <exclude name='**/*svn' /> 
    </fileset> 
</copy> 

और एक चर में fileset भंडारण तो यह फिर से इस्तेमाल किया जा सकता?

उत्तर

38

फाइलसेट पर एक आईडी विशेषता घोषित करें और फिर प्रत्येक प्रति कार्य में संदर्भित करें।

उदाहरण के लिए:

<project name="foo"> 
    <fileset id="myFileSet" dir="${src}"> 
    <exclude name='**/*svn' /> 
    </fileset> 
    ... 
    <target name="copy1"> 
    <copy todir="${target}/path/to/target/1"> 
     <fileset refid="myFileSet"/> 
    </copy> 
    </target> 
    <target name="copy2"> 
    <copy todir="${target}/path/to/target/2"> 
     <fileset refid="myFileSet"/> 
    </copy> 
    </target> 
</project> 
+0

सही। इसे यहां परिभाषित किया गया है: खंड में https://ant.apache.org/manual/Types/filterset.html "फ़िल्टरसेट को परिभाषित करें और बाद में इसका संदर्भ लें।" –

+0

ध्यान दें कि कुछ फाइलसेट चयनकर्ताओं के साइड इफेक्ट्स हो सकते हैं जिसका मतलब है कि एक ही फाइलसेट को दो बार संदर्भित करना एक ही परिणाम नहीं मिलेगा। उदाहरण के लिए: '' पहले रन के बाद अपने कैश को अपडेट करेगा, और बाद में फाइलसेट को फिर से संदर्भित करेगा, अंतर्निहित फ़ाइलों में कोई बदलाव नहीं मानता है, एक खाली सेट लौटाएगा। –

28

Rich's answer शायद अपने विशिष्ट समस्या के लिए बेहतर है, लेकिन चींटी में कोड पुन: उपयोग के सामान्य तरीके से एक <macrodef> है।

<macrodef name="copythings"> 
    <attribute name="todir"/> 
    <sequential> 
    <copy todir="@{todir}"> 
     <fileset dir="${src}"> 
     <exclude name='**/*svn' /> 
     </fileset> 
    </copy> 
    </sequential> 
</macrodef> 

<copythings todir="/path/to/target1"/> 
<copythings todir="/path/to/target2"/> 
+0

यह स्वीकार्य उत्तर होना चाहिए। वास्तविक स्वीकृत उत्तर दोहराया गया कोड है, जो कि ओपी ने कहा था कि वह इससे बचने की कोशिश कर रहा था। – searchengine27

0

upvoted पहले जवाब पहले से ही है, लेकिन आप भी एक नक्शाकार का उपयोग आपको अनेक स्थानों पर कॉपी करने के लिए कर सकते हैं।

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