2013-04-18 5 views
6

संसाधनों की प्रतिलिपि बनाने और उनका नाम बदलने के लिए org.apache.maven.plugins:maven-antrun-plugin का उपयोग करना आसान है, लेकिन क्या यह कानूनी नियमों के अनुरूप वाइल्डकार्ड या अन्य मेकेनिज्म के साथ समझदारी से ऐसा करने का कोई तरीका है?बुद्धिमानी से संसाधनों की प्रतिलिपि बनाने के लिए मेवेन और चींटी प्लगइन

उदाहरण के लिए अगर मैं उन फ़ाइलों है:

  • ${project.artifactId}-${project.version}.swf
  • a.swf
  • b.swf
  • ...
  • z.swf

मैं कॉपी करना चाहते हैं निर्देशिका के अंदर उन सभी फ़ाइलों और केवल ${project.artifactId}-${project.version}.swf से foo.swf का नाम बदलें। मैं जानता हूँ कि मैं उपयोग कर सकते हैं:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
     <executions> 
      <execution> 
      <id>copy-swf-files</id> 
      <phase>compile</phase> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       <configuration> 
        <target name="copy swf files to web project"> 
         <copy file="${project.build.directory}/${project.artifactId}-${project.version}.swf" tofile="${swf.output.location}/foo.swf" /> 
         <copy file="${project.build.directory}/a.swf" tofile="${swf.output.location}/a.swf" /> 
         <copy file="${project.build.directory}/z.swf" tofile="${swf.output.location}/z.swf" /> 
        </target> 
       </configuration>      
       </execution> 
      </executions> 
    </plugin> 

यह काम है, लेकिन वहाँ है कि क्योंकि अगर मैं कॉपी करने के लिए 1000 फाइलों है, यह बहुत उबाऊ हो जाएगा करने के लिए एक और आसान तरीका है ... धन्यवाद

उत्तर

1

उपयोग Maven-विधानसभा - "डीआईआर" "प्रारूप/प्रारूप" के असेंबली डिस्क्रिप्टर के साथ प्लगइन, एक "फाइलसेट्स/फाइलसेट" जो विशेष एसएफएफ को छोड़कर एसएफएफ के बहुमत की प्रतिलिपि बनायेगा, और एक "फाइल/फाइल" जो एक एसएफएफ को फाइल के साथ अलग करेगा नाम।

+0

हाय। मैंने Google पर देखा कि मैं इस प्लगइन का उपयोग कर सकता हूं लेकिन मैंने ऐसा करने के लिए चींटी प्लगइन का उपयोग करने का फैसला किया क्योंकि मैंने कभी भी इस प्लगइन का उपयोग नहीं किया ^^।वैसे भी +1, मैं जितनी जल्दी हो सके इस प्लगइन का अध्ययन करूंगा –

+0

जब भी मैं pom.xml में antrun देखता हूं तो यह अच्छा संकेत है कि कुछ गलत किया जा रहा है। –

15

क्या आप चींटी जानते हैं? सभी मेवेन चींटी प्लगइन आपके द्वारा सूचीबद्ध कार्यों के साथ चींटी को बुला रहा है। आप <taskdef> सहित किसी भी चींटी कार्य, आदि

आप कर रहे हैं की तरह फ़ाइलसेट साथ किया जा सकता क्या यह लग रहा है कर सकते हैं:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="*.swf"/> 
    </fileset> 
</copy> 

यह ${project.build.directory} में सभी *.swf के तहत सीधे स्थित फ़ाइलों की प्रतिलिपि (और कोई उपनिर्देशिका नहीं) ${swf.output.location} निर्देशिका में। आप, *.swf फ़ाइलों की पूरी निर्देशिका वृक्ष की प्रतिलिपि बनाना चाहते हैं, बस बदलने <include>:

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
</copy> 

आप फ़ाइल नाम Munge करने की जरूरत है, तो आप Mappers उपयोग कर सकते हैं।

<copy todir="${swf.output.location}"> 
    <fileset dir="${project.build.directory}"> 
     <include name="**/*.swf"/> <!--NOTE DIFFERENCE HERE--> 
    </fileset> 
    <mapper type="flatten"/> 
</copy> 

इस पूरी निर्देशिका वृक्ष कॉपी और एक ही निर्देशिका में सभी फ़ाइलों को समतल होगा: सरल नक्शाकार समतल नक्शाकार होगा। ऐसे मैपर हैं जो ग्लोब, नियमित अभिव्यक्तियों और यहां तक ​​कि स्क्रिप्टिंग से मेल खाते हैं।

<include>selector है और मैपर नहीं है क्योंकि यह चुनता है कि आप कौन सी फाइलों पर कार्य करना चाहते हैं। ये भी काफी जटिल हो सकते हैं, और आप उनके नाम iva नियमित अभिव्यक्तियों, या यहां तक ​​कि उनकी सामग्री के आधार पर फ़ाइल से मिलान कर सकते हैं।

मुझे आश्चर्य है कि एक मेवेन प्लगइन नहीं है जो आपको ऐसा करने की अनुमति देता है।

+0

हम्म इस लिंक के लिए धन्यवाद, मुझे लगता है कि 'regexpselect' मुझे बचाएगा। मेवेन के साथ एक 'प्रति-संसाधन' लक्ष्य है लेकिन मेरा मानना ​​है कि हम फ़ाइलों का नाम बदल नहीं सकते हैं, बस उन्हें कॉपी करें। स्टीवो स्लाविक द्वारा सुझाए गए अनुसार, मेवेन-असेंबली-प्लगइन है लेकिन मैंने अभी तक इसका उपयोग नहीं किया है। –

+0

@ ओलिवियरजे। मैंने वास्तव में आपको अपने उदाहरण में फ़ाइलों का नाम बदलने में नहीं देखा था। बस एक निर्देशिका से दूसरी निर्देशिका में फ़ाइलों का एक गुच्छा की प्रतिलिपि बनाएँ। वैसे, क्या आपका मतलब 'regexp' मैपर था? –

+0

बस पहली कॉपी लाइन की जांच करें, मैं टॉफाइल बदलता हूं ".../foo.swf" –

2

ठीक है, मैं अंत में इस प्लगइन का इस्तेमाल किया यह करने के लिए:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <id>copy-swf-files</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <target name="copy swf files to web project">  
      <copy todir="${swf.output.location}"> 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <filename regex="^sim-flex.*"/> 
       </fileset> 
      <mapper type="regexp" from=".*" to="sim.swf"/> 
      </copy> 
      <copy todir="${swf.output.location}" > 
       <fileset dir="${project.build.directory}" includes="*.swf"> 
        <not> 
         <filename regex="^sim-flex.*"/> 
        </not>         
       </fileset> 
      </copy> 
     </target> 
     </configuration>      
    </execution> 
</executions> 
</plugin> 
+0

क्या यह प्लगइन दूरस्थ सर्वर पर फ़ाइलों की प्रतिलिपि बना सकता है? – zygimantus

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