2011-10-19 19 views
98

में परिभाषित एक मेवेन प्लगइन को अक्षम करें मैं एक मूल पीओएम का उपयोग कर रहा हूं जो एक प्लगइन को परिभाषित करता है जिसे मैं एक बच्चे पीओएम में नहीं चलाऊंगा। मैं बच्चे के पोम में प्लगइन को पूरी तरह अक्षम कैसे कर सकता हूं?अभिभावक पीओएम

बाधा: मैं मूल पीओएम को स्वयं नहीं बदल सकता।

उत्तर

122

निम्नलिखित काम करता है जब एक बच्चे पोम FindBugs अक्षम करने:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>findbugs-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>none</phase> 
     </execution> 
    </executions> 
</plugin> 

नोट: Findbugs प्लगइन की पूरी परिभाषा हमारे माता-पिता/सुपर पीओएम में है, इसलिए यह संस्करण का वारिस होगा और इसी तरह। प्लगइन के लिए

<configuration> 
     <skip>true</skip> 
</configuration> 

:

Maven 3 में, आप का उपयोग करना होगा।

+5

काम किया, जबकि यह" सही "है, लेकिन यह काम करता है यह ध्यान दिया जाना चाहिए कि यह एक अनिर्दिष्ट (या कम से कम _undocumented_) सुविधा है। 'कोई नहीं' नामक कोई आधिकारिक चरण नहीं है। तो, आप वहां 'foo' भी डाल सकते हैं। –

+1

मेरे लिए मेवेन 3 में यह काम नहीं करता है। सच जैसे bmargulies ने सुझाव दिया है – mibutec

+1

मैंने मेवेन 3. –

38

देखें कि प्लगइन में 'छोड़ें' कॉन्फ़िगरेशन पैरामीटर है या नहीं। लगभग सभी करते हैं। अगर यह होता है, सिर्फ बच्चे में एक घोषणा में जोड़ें:

<plugin> 
    <groupId>group</groupId> 
    <artifactId>artifact</artifactId> 
    <configuration> 
    <skip>true</skip> 
    </configuration> 
</plugin> 

यदि नहीं, तो का उपयोग करें: मेरे लिए

<plugin>  
<groupId>group</groupId> 
<artifactId>artifact</artifactId>  
<executions> 
    <execution> 
     <id>TheNameOfTheRelevantExecution</id> 
     <phase>none</phase> 
    </execution>  
</executions> 
</plugin> 
+4

दोनों विकल्पों की कोशिश की, लेकिन वे काम नहीं करते। – tobiasbayer

+0

जिस प्लगइन के साथ आप काम कर रहे हैं उसका नामकरण करने और सहायता चलाने के बारे में: प्रभावी-पोम यह देखने के लिए कि क्या आपके पास वास्तव में निष्पादन सही है या नहीं। – bmargulies

+1

प्लगइन बनाम प्लगइन के लिए प्लगइन के लिए भी देखें। बाद में पूर्व को ओवरराइड करता है। – bmargulies

19

धागा पुराना है, लेकिन शायद कोई अभी भी रुचि रखता है। मैंने पाया सबसे छोटा रूप λlex और bmargulies के उदाहरण पर और सुधार है। हैक

  1. चरण कुछ भी नहीं करने के लिए सेट कर दिया जाता है, जो 'कोई नहीं' से भी कम समय hacky लग रहा है, हालांकि अभी भी: निष्पादन टैग दिखेगा की तरह:

    <execution> 
        <id>TheNameOfTheRelevantExecution</id> 
        <phase/> 
    </execution> 
    

    2 अंक मैं हाइलाइट करना चाहते हैं।

  2. आईडी निष्पादन के समान होना चाहिए जो आप ओवरराइड करना चाहते हैं। यदि आप निष्पादन के लिए आईडी निर्दिष्ट नहीं करते हैं, तो मैवेन इसे पूरी तरह से करेगा (जिस तरह से आपके द्वारा सहजता से अपेक्षित नहीं है)।

पोस्ट करने के बाद पाया यह पहले से ही stackoverflow में है: In a Maven multi-module project, how can I disable a plugin in one child?

+1

रिकॉर्ड के लिए: डिफ़ॉल्ट निष्पादन आईडी इस उत्तर में रखे गए सरल नियमों का पालन करती हैं: http://stackoverflow.com/a/34599117/7641 –

+1

यह ध्यान देने योग्य है कि यह समाधान वास्तव में ** अक्षम करता है ** (ओपी के रूप में) प्लगइन-विशिष्ट "छोड़ें" विकल्प पर भरोसा करने के बजाय प्लगइन (दिए गए निष्पादन आईडी के लिए) के लिए पूछा गया। – Zero3

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