2011-11-23 15 views
11

हाय मैं मैवेन के लिए बहुत नया हूं। मैं मैवेन प्लग-इन निष्पादन के क्रम को बदलना चाहता हूं। मेरे pom.xml में मेरे पास मेवेन-असेंबली प्लग-इन और मैवेन एंटी प्लग-इन है। ज़िप फ़ाइल को किसी अन्य निर्देशिका से कॉपी करने के लिए ज़िप फ़ाइल और मेवेन एंटी प्लग-इन बनाने के लिए मैवेन असेंबली प्लग-इन का उपयोग किया गया। जब मैं pom.xml maven ant plug-in चलाता हूं तो ट्रिगर हो जाता है और ज़िप फ़ाइल की तलाश में अंततः मुझे त्रुटि मिली है कि ज़िप फ़ाइल नहीं मिली है। कृपया मुझे उस मेवेन एंट प्लग को चलाने की जरूरतों के बाद मेवेन असेंबली प्लग को चलाने के तरीके का सुझाव दें ताकि वह ज़िप फ़ाइल को इसी निर्देशिका में कॉपी कर सके।मैवेन प्लगइन निष्पादन के आदेश को बदलना

+0

इसका ध्यान देने योग्य है कि आप एक कदम है कि किसी फ़ाइल से कोई संपत्ति पढ़ता है, तो आप उस संपत्ति का उपयोग पोम में बाद के चरणों में नहीं कर सकते ... देखें [यह पोस्ट] (http://stackoverflow.com/questions/8541332/maven-read-version-number-from-property-file/27782825# 27782825) –

उत्तर

25

चूंकि आप कहते हैं कि आप मेवेन के लिए बहुत नए हैं .... मेवेन बनाता है चरणों की एक क्रमबद्ध श्रृंखला के निष्पादन। इन चरणों को lifecycle द्वारा निर्धारित किया गया है जो आपकी परियोजना based on its packaging के लिए उपयुक्त है।

इसलिए

, आप नियंत्रण जब एक प्लगइन के लक्ष्य binding it to a particular phase द्वारा निष्पादित किया जाता है।

उम्मीद है कि मदद करता है।

संपादित करें: इसके अलावा, Maven 3.0.3 के बाद से, एक ही चरण करने के लिए बाध्य दो प्लग-इन, निष्पादन के आदेश के क्रम है जिसमें आप उन्हें परिभाषित के समान है। उदाहरण के लिए:

<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-2</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-3</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>generate-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 

ऊपर उदाहरण में, निष्पादन आदेश होगा:

  1. Maven-प्लगइन-3 (उत्पन्न-संसाधन)
  2. Maven-प्लगइन-1 (प्रक्रिया-संसाधन)
  3. Maven-प्लगइन-2 (प्रक्रिया-संसाधन) एक ही चरण में
+0

आपकी प्रतिक्रिया के लिए धन्यवाद। – user1062115

6

प्लगइन्स घोषित क्रम में क्रियान्वित कर रहे हैं।

जनक pom.xml:

पोम पदानुक्रम के मामले में, आप निष्पादन आदेश निर्दिष्ट करने के लिए बच्चे को पोम पोम में माता-पिता (सिर्फ अपने ग्रुप और उसके artifactId) से प्लगइन्स फिर से घोषित करने के लिए है

<plugins> 
    <plugin> 
     <groupId>groupid.maven.1</groupId> 
     <artifactId>maven-plugin-1</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

बाल pom.xml

<plugins> 
    <plugin> 
     <groupId>groupid.maven.2</groupId> 
     <artifactId>maven-plugin-2</artifactId> 
     <version>1.0</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
      </execution> 
     </executions> 
    </plugin> 
    <plugin> 
     <groupId>groupid.maven.1</groupId> 
     <artifactId>maven-plugin-1</artifactId> 
    </plugin> 
</plugins> 

तब निष्पादन है:

  1. maven.plugin.2
  2. maven.plugin.1
0

Maven 3.0.3 और बाद, वहाँ दो नियमों

  1. प्लगइन हैं निष्पादन उनके चरणों के अनुसार आदेश दिया जाता है। https://maven.apache.org/ref/current/maven-core/lifecycles.html चरणों के क्रम के लिए देखें।

उदाहरण के लिए, यहाँ mavin-प्लगइन-1 क्योंकि प्रक्रिया-संसाधनों चरण संकलन चरण से पहले हो रही के रूप में परिभाषित किया गया है इससे पहले कि Maven-प्लगइन-2 निष्पादित किया जाता है।

<plugin> 
    <artifactId>maven-plugin-2</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>compile</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.0</version> 
    <executions> 
    <execution> 
     <phase>process-resources</phase> 
     ... 
    </execution> 
    </executions> 
</plugin> 
  1. कई सज़ाएँ एक ही चरण है, तो पहले एक होने की निष्पादित किया जाएगा निर्मित एक (जैसे Maven-संकलक प्लगइन) जिसका आईडी default- कुछ है, तो अन्य फांसी क्रम में वे अपने पोम फ़ाइल में दिखाई में जगह ले जाएगा।
उदाहरण के लिए

, आप अपने पोम

 <plugin> 
      <artifactId>maven-plugin-1</artifactId> 
      <version>1.2.3</version> 
      <executions> 
       <execution> 
        <id>my-compile</id> 
        <phase>compile</phase> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <artifactId>maven-plugin-2</artifactId> 
      <version>4.5.6</version> 
      <executions> 
       <execution> 
        <id>my-compile-2</id> 
        <phase>compile</phase> 
       </execution> 
      </executions> 
     </plugin> 

में यह कहीं नहीं है और अपने प्रभावी पोम में यह कहीं भी हो, तो

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <executions> 
     <execution> 
     <id>**default-compile**</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>compile</goal> 
     </goals> 
     </execution> 
     ... 
    </executions> 
    </plugin> 

तो maven-संकलक प्लगइन Maven-compiler- निष्पादित करेंगे प्लगइन के बाद maven-plugin-1, और maven-plugin-2।

यदि आप चाहते हैं Maven-संकलक प्लगइन: के बाद निष्पादित करने के लिए लक्ष्य को संकलित Maven-प्लगइन-1 तो तुम कर सकते हो इस

<plugin> 
    <artifactId>maven-plugin-1</artifactId> 
    <version>1.2.3</version> 
    <executions> 
     <execution> 
      <id>my-compile</id> 
      <phase>compile</phase> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <executions> 
     <execution> 
      <id>something-other-than-**default-compile**</id> 
      <phase>compile</phase> 
     </execution> 
     <execution> 
      <id>**default-compile**</id> 
      <phase>none</phase> 
      <goals> 
       <goal>compile</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
संबंधित मुद्दे