2011-05-25 9 views
6

Sorum bu ipliğin devamında ise devam etti: Ben haritacılara yeniyim Ant: copy the same fileset to multiple placesAnt: birden fazla yerde aynı fileset kopya -

. Birisi (carej?), Bunu yapmak için mapper kullanmanın bir örneğini paylaşabilir mi?

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

Ben karınca-contrib (üzgünüm ... karınca yer veya herhangi taskdesf benim kontrolümde değil) kullanmak için seçeneği yok: İşte için çalışıyorum budur. Bu yüzden belirsiz sayıda klasörün nasıl geçeceğini bilmiyorum. üzerimde

Kısıtlamalar:

Sadece child1_folder ismi diğer çocukların
  • Numara ben yaratması bekleniyor am
  • belirsizdir (diğer çocukların isimlerini bilmiyorum) biliyorum
    1. Her alt klasörün altında files klasörü (kopyalanmazsa başka bir görev yoluyla). İşte

    (bu çalışmaya başladığında, ek haritacılarla uzatacaktır şu anda tek bir dosya için çalışıyor) ne için çalışıyordu geçerli:

    <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> 
    

    O No sources found. ardından skipped - don't know how to handle it söyleyip duruyor. peşin

    sayesinde Parag Doke

    Başka (muhtemelen?) ilgili sorusu: Using mapper & fileset to copy files into a different subdirectory?

  • cevap

    3

    Burada tek yönlü bir örnek. Anahtar özellikler, kopyalama görevinde enablemultiplemappings ve hedef dizinleri yinelemek için bir scriptmapper kullanımıdır. Komut dosyası için sağlanan kaynağın yalnızca hedef dizine göre kopyalanacak dosyanın yolu olması için bir eşleştirici zincir kullanılır.

    <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> 
    

    Kopyalama işindeki mizanpik eşleştirmeler, sürüm 1.6'dan beri Ant'de olmuştur.

    +0

    Çok teşekkürler Martin Clayton bunun için! Benim gerçek gereksinimi karşılamak için biraz Tweaked (yukarıda belirtilen 1 sadece bir örnek) - bir flattenmapper ile globmapper değiştirmek zorunda kaldı - ama yardımınız ile çalışmak için var. –