माता-पिता POM में परिभाषित एक मावेन प्लगइन अक्षम करें


158

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

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

जवाबों:


205

जब बच्चे POM में फाइंडबग्स को अक्षम करते हैं तो मेरे लिए निम्नलिखित कार्य करता है:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ID_AS_IN_PARENT</id> <!-- id is necessary sometimes -->
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

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

Maven 3 में, आपको उपयोग करने की आवश्यकता होगी:

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

प्लगइन के लिए।


8
हालांकि यह 'सही' है यानी यह काम करता है यह ध्यान दिया जाना चाहिए कि यह एक अनिर्दिष्ट है (या कम से कम गैर-दस्तावेजी ) सुविधा। कोई आधिकारिक चरण नहीं है जिसे 'कोई नहीं' कहा जाता है। इसलिए, आप वहां 'फू' डाल सकते हैं।
मार्सेल

1
मेरे लिए मावेन 3 में यह काम नहीं करता है। <Skip> true </ स्किप> जैसे bmargulies ने सुझाव दिया काम करता है
mibutec

10
मुझे <id>…</id>मूल POM का हिस्सा जोड़ना था , तब यह मेरे लिए काम करता था।
मिराबिलोस

4
Maven 3 समाधान वास्तव में प्लगइन को निष्क्रिय नहीं करता है, हालांकि यह करता है? आउटपुट के अनुसार, प्लगइन अभी भी निष्पादित है। क्या यह तब स्किप कॉन्फ़िगरेशन का सम्मान करता है, और यह कैसे / क्या छोड़ना चुनता है, व्यक्तिगत प्लगइन तक दिखाई देता है।
जीरो 3

10
mirabilos की टिप्पणी Maven 3 के लिए सही समाधान है और सभी प्लगइन्स में पोर्टेबल है। सभी प्लगइन्स में एक <skip>पैरामीटर नहीं होता है।
गिली

60

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

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

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

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

मैं कोबर्टुरा प्लगइन का उपयोग कर रहा हूं और मैं इसे बाल पोम में नहीं चलाना चाहता हूं।
Tobiasbayer

चेक लक्ष्य 2.5 में एक स्किप है। यह पहले नहीं था। कोबेरटुरा गोल नहीं करता है।
बमरगुलियों

मैं सिर्फ चेक ही नहीं बल्कि पूरे प्लगइन को छोड़ना चाहता हूं।
टोबैसबेयर

37

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

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

2 अंक जिन्हें मैं हाइलाइट करना चाहता हूं:

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

पोस्ट करने के बाद पाया गया कि यह पहले से ही स्टैकटओवरफ़्लो में है: मावेन मल्टी-मॉड्यूल प्रोजेक्ट में, मैं एक बच्चे में प्लगइन कैसे निष्क्रिय कर सकता हूं?


1
रिकॉर्ड के लिए: डिफ़ॉल्ट निष्पादन आईडी इस नियम में
बताए गए

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

3

मुझे पता है कि यह धागा वास्तव में पुराना है लेकिन @ इवान बोंडारेंको के समाधान ने मेरी स्थिति में मदद की।

मैं अपने में निम्नलिखित था pom.xml

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

मैं जो चाहता था, generate-citrus-warएक विशिष्ट प्रोफ़ाइल के निष्पादन को अक्षम करना था और यह समाधान था:

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.