2010-07-30 9 views
8

मेरे पास बाल मॉड्यूल के समूह के साथ एक मूल पोम है। मैं एंट्रून चलाने के लिए चाहता हूं: रन सभी बच्चों ने पैकेज कार्य निष्पादित करने के बाद कार्य किया है (मैं अपने ऐप को पैकेज करने के लिए चींटी का उपयोग कर रहा हूं क्योंकि मैंने यह पता लगाया है कि विधानसभा को सही ढंग से कैसे काम करना है)।आप एंट्रून निष्पादित करने के लिए मेवेन को कैसे मजबूर करते हैं: बाल मॉड्यूल के साथ पीओएम में सभी पैकेज कार्यों के बाद कार्य चलाएं?

मैं antrun कार्य सभी बच्चों के बाद पर अमल करने की जरूरत है - लेकिन मैं इसके साथ पैकेज चरण संबद्ध नहीं कर सकते, क्योंकि माता-पिता बच्चों से पहले "पैक" हो जाता है, और मैं चींटी की जरूरत बाद में चलाने के लिए।

क्या एक आदेश में ऐसा करने का कोई तरीका है?

आसान तरीके को, ज़ाहिर है, 2 Maven आदेशों को चलाने के लिए है:

mvn package; mvn antrun:run 

लेकिन मैं, एक में क्या करना चाहते हैं यदि संभव हो तो

mvn package antrun:run 

गलत व्यवहार का उत्पादन - यह antrun चलाता है: बाल परियोजनाओं से पहले चलाएं 'पैकेज चरण। माता-पिता पर चलाएँ:

आदर्श रूप में, मैं सिर्फ टाइप करने के लिए

mvn package 

और वह रन सभी बच्चों पर पैकेज चरण है, और फिर antrun चलाने में सक्षम होगी।

उत्तर

11

मैं antrun कार्य सभी बच्चों के बाद अमल करने की जरूरत है - लेकिन मैं इसे पैकेज चरण के साथ संबद्ध नहीं कर सकते, क्योंकि माता-पिता बच्चों से पहले "पैक" हो जाता है, और मैं चींटी की जरूरत बाद में चलाने के लिए।

एक और मॉड्यूल है कि सभी बच्चों पर निर्भर करता है (इतना है कि यह एक रिएक्टर का निर्माण के दौरान पिछले परियोजना होगी) और इस मॉड्यूल में package पर अपने antrun सामान बाँध बनाएँ। फिर रूट प्रोजेक्ट से mvn package चलाएं।

+1

प्रतिभाशाली!मुझे कल्पना है कि यह करने के लिए यह लगभग maveny_ तरीका नहीं है, लेकिन यह निश्चित रूप से काम करता है। दिलचस्प बात यह है कि, मैंने मॉड्यूल सूची के अंत में अपना नया _packager_ मॉड्यूल रखा है, और मुझे किसी भी चीज़ पर भी निर्भर नहीं होना चाहिए - यह अभी काम करता है। सुझाव के लिए धन्यवाद। – toli

+3

@toli: आपका स्वागत है। लेकिन मैं दृढ़ता से निर्भरता को स्पष्ट रूप से घोषित करने का सुझाव देता हूं ताकि निर्माण आदेश की गणना विश्वसनीय तरीके से की जाएगी। यह वर्तमान में "दुर्घटना से" काम करता है। –

+0

हाँ। उदाहरण के लिए, यदि आप समांतर बिल्ड (प्रयोगात्मक सुविधा) को सक्षम करने के लिए 'mvn package -T 4' चलाते हैं, तो यह संभवतः विफल हो जाएगा क्योंकि कुछ निर्भरताएं उपलब्ध नहीं होंगी। –

-3

सबसे पहले आपको एंटरन प्लगइन के लिए execution निर्दिष्ट करना होगा। यह उस प्लगइन के संचालन को स्वचालित करेगा।

तो फिर तुम से पहले antrun प्लगइनपैकेज प्लगइन चलाने के लिए Maven पुश करने के लिए है। जब आप पैकेज प्लगइनantrun प्लगइन सेटअप से पहले सेटअप करते हैं तो आप ऐसा कर सकते हैं।

सेटअप उदाहरण:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    </plugin> 
    <plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
     <execution> 
     <phase> package </phase> 
     <configuration> 
      <tasks> 

      <!-- 
       Place any Ant task here. You can add anything 
       you can add between <target> and </target> in a 
       build.xml. 
      --> 

      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
+0

I मेरे पीओएम में आपका उपरोक्त सेटअप बिल्कुल सही है: _Then आपको एंटर प्लगइन से पहले पैकेज प्लगइन चलाने के लिए मेवेन को धक्का देना होगा। जब आप antrun प्लगइन सेटअप से पहले पैकेज प्लगइन सेटअप करते हैं तो आप ऐसा कर सकते हैं ._ मेरे पास पैकेज प्लगइन के लिए कोई सेटअप नहीं है ... तो मैं इसे पहले _push कैसे करूं? – toli

+1

@toli: आप पहले कुछ भी "धक्का" नहीं दे सकते हैं, डिफ़ॉल्ट बाइंडिंग (जिसे आप "अनबिंड नहीं कर सकते") हमेशा **, अवधि से पहले ** चलाएंगे। और कोई * पैकेज प्लगइन * नहीं है। –

3

रखो

<inherited>false</inherited> 

अपने प्लगइन परिभाषा:

<plugin> 
<artifactId>maven-antrun-plugin</artifactId>  
      <inherited>false</inherited> 
       <executions> 
       <execution> 
        <phase>compile</phase> 
        <configuration> 

        <tasks> 
         <ant antfile="buildall.xml"> 

         </ant> 
        </tasks> 
       </configuration> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       </execution> 
      </executions> 
     </plugin> 
+1

मुझे नहीं लगता कि यह सवाल का जवाब देता है। विरासत (झूठा) बस बताता है कि वर्तमान प्लगइन के बच्चों के लिए प्लगइन निष्पादित नहीं किया जाना चाहिए – Tcharl

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