2011-05-25 10 views
6

मेरा प्रश्न इस सूत्र की निरंतरता में है: Ant: copy the same fileset to multiple placesचींटी: एक से अधिक स्थानों के लिए एक ही फ़ाइलसेट कॉपी - जारी रखा

मैं मानचित्रकारों के लिए नया हूँ। क्या कोई (carej?) कृपया ऐसा करने के लिए मैपर का उपयोग करने का एक उदाहरण साझा कर सकता है?

 
parent_folder 
    |----child1_folder 
    |   |----files 
    |    |----config.file 
    |    |----data.txt 
    |----child2_folder 
    |----child3_folder 
    . 
    . 
    . 
    |----childn_folder 

मैं चींटी-योगदान (खेद ... चींटी स्थान या किसी taskdesf मेरे नियंत्रण में नहीं है) का उपयोग करने का विकल्प नहीं है: यहाँ है कि मैं क्या करने के लिए कोशिश कर रहा हूँ है। तो मुझे नहीं पता कि फ़ोल्डरों की अनिश्चित संख्या पर लूप कैसे करें। मुझ पर

प्रतिबंध:

  1. मैं केवल child1_folder के नाम (अन्य बच्चों के नाम पता नहीं है)
  2. अन्य बच्चों की संख्या अनिश्चित है
  3. मैं बनाने के लिए उम्मीद कर रहा हूँ पता है प्रत्येक बच्चे फ़ोल्डर के तहत files फ़ोल्डर (किसी अन्य कार्य के माध्यम से, अगर प्रतिलिपि नहीं है)।

यहाँ है कि मैं क्या करने के लिए कोशिश कर रहा था (यह काम करने के लिए शुरू होता है एक बार वर्तमान में एक एकल फाइल के लिए कोशिश कर रहा है, अतिरिक्त मानचित्रकारों से विस्तार होगा) है:

<copy todir="/tmp/parent_folder" verbose="true"> 
    <fileset dir="/tmp/parent_folder"> 
     <include name="*/files/config.file"/> 
    </fileset> 
    <mapper type="glob" from="*/files/config.file" to="*/files/config.file"/> 
</copy> 

यह skipped - don't know how to handle itNo sources found. के बाद कह रहता है।

अग्रिम धन्यवाद, पराग Doke

एक और (संभवतः?) से संबंधित प्रश्न: Using mapper & fileset to copy files into a different subdirectory?

उत्तर

3

यहाँ एक ही रास्ता है, इसका एक उदाहरण। मुख्य कार्य प्रतिलिपि में enablemultiplemappings का उपयोग है, और scriptmapper लक्ष्य निर्देशिकाओं पर पुनरावृत्त करने के लिए सौदा करने के लिए उपयोग किया जाता है। एक मैपर श्रृंखला का उपयोग स्क्रिप्टमैपर को प्रदान किया गया स्रोत बनाने के लिए किया जाता है, केवल लक्ष्य निर्देशिका के सापेक्ष प्रतिलिपि बनाने के लिए फ़ाइल का पथ होना चाहिए।

<property name="src.dir" value="child1_folder" /> 

<dirset dir="parent_folder" id="target.dirs"> 
    <include name="*" /> 
    <exclude name="${src.dir}" /> 
</dirset> 

<copy todir="parent_folder" enablemultiplemappings="yes"> 
    <fileset dir="parent_folder"> 
     <include name="${src.dir}/**"/> 
    </fileset> 
    <chainedmapper> 
     <globmapper from="${src.dir}/*" to="*" /> 
     <scriptmapper language="javascript"> 
     <![CDATA[ 
      // Obtain a reference to the dirset 
      var dirSet = project.getReference("target.dirs"); 

      // Now get matching dirs. 
      var ds = dirSet.getDirectoryScanner(project); 
      var includes = ds.getIncludedDirectories(); 
      for (var i = 0; i < includes.length; i++) 
      { 
       self.addMappedName(includes[i] + "/" + source); 
      } 
     ]]> 
     </scriptmapper> 
    </chainedmapper> 
</copy> 

कॉपी कार्य में मुलिटल मैपिंग संस्करण 1.6 के बाद से चींटी में हैं।

+0

इसके लिए बहुत धन्यवाद मार्टिन क्लेटन! मेरी वास्तविक आवश्यकता के अनुरूप थोड़ा सा tweaked (ऊपर वर्णित 1 सिर्फ एक नमूना था) - glattmapper को flattenmapper के साथ प्रतिस्थापित करना था - लेकिन यह आपकी मदद से काम करने के लिए मिला। –

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