मावेन के pom.xml में pluginManagement क्या है?


266

यह मेरी पोम फाइल का एक स्निपेट है।

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

मैं इसे कमांड के साथ सफलतापूर्वक उपयोग करता हूं

mvn install

लेकिन, जब मैं इसे "pluginManagement" टैग में शामिल करने की कोशिश करता हूं, तो जब मैं लक्ष्य maven-dependency-pluginलॉन्च करता हूं तो काम करना बंद कर देता है install। "PluginManagement" टैग बिल्ड व्यवहार को क्यों बदलता है? या मुझे एक और लक्ष्य या विकल्प का उपयोग करना चाहिए?

जवाबों:


299

आपको अभी भी जोड़ना है

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
    </plugin>
</plugins>

आपके निर्माण में, क्योंकि pluginManagement आपके सभी प्रोजेक्ट मॉड्यूल में समान प्लगइन कॉन्फ़िगरेशन को साझा करने का केवल एक तरीका है।

मावेन प्रलेखन से:

pluginManagement : एक ऐसा तत्व है जो साइड प्लगइन्स के साथ देखा जाता है। प्लगइन प्रबंधन में प्लगइन तत्व बहुत समान तरीके से होते हैं, सिवाय इसके कि इस विशेष परियोजना के निर्माण के लिए प्लगइन की जानकारी को कॉन्फ़िगर करने के बजाय, यह है कि इस एक से इनहेरिट प्रोजेक्ट बिल्ड को कॉन्फ़िगर करने का इरादा है। हालाँकि, यह केवल उन प्लगइन्स को कॉन्फ़िगर करता है जो वास्तव में बच्चों में प्लगइन्स तत्व के भीतर संदर्भित होते हैं। बच्चों को प्लगइन प्रबंधन परिभाषाओं को ओवरराइड करने का हर अधिकार है।


266

के बीच अंतर है <pluginManagement/>और <plugins/>यह है कि एक के <plugin/>तहत:

  • <pluginManagement/>प्लगइन्स के लिए सेटिंग्स को परिभाषित करता है जो आपके निर्माण में मॉड्यूल द्वारा विरासत में मिलेगा। यह उन मामलों के लिए बहुत अच्छा है, जहां आपके पास पैरेंट पोम फाइल है।

  • <plugins/>प्लगइन का एक वास्तविक आह्वान है। यह एक से विरासत में मिला या नहीं हो सकता है <pluginManagement/>

यदि <pluginManagement/>आपके माता-पिता POM नहीं हैं, तो आपको अपने प्रोजेक्ट में होने की आवश्यकता नहीं है। हालांकि, अगर यह एक माता पिता की पोम है, तो बच्चे के पोम में, आपको एक घोषणा की आवश्यकता है:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

ध्यान दें कि आप किसी भी कॉन्फ़िगरेशन को कैसे परिभाषित नहीं कर रहे हैं। आप इसे माता-पिता से विरासत में प्राप्त कर सकते हैं, जब तक कि आपको बच्चे के प्रोजेक्ट की जरूरतों के अनुसार अपने मंगलाचरण को समायोजित करने की आवश्यकता न हो।

अधिक विशिष्ट जानकारी के लिए, आप देख सकते हैं:


आपके जवाब के लिए धन्यवाद। मुझे उसी pom फ़ाइल पर pluginManagement और प्लगइन टैग (मावेन-निर्भरता-प्लगइन के लिए) को मिलाने की आवश्यकता है, क्योंकि मुझे M2E ग्रहण आईडीई प्लगइन के एक छोटे बग को बायपास करने की आवश्यकता है। देखें stackoverflow.com/questions/8706017/…
एंड्रिया बोर्गोगेली एवेदुती

7
धन्यवाद! :) यह <dependency/>और के लिए समान है <dependencyManagement/>। आप निर्भरता (यदि आप चाहें तो उनके संस्करणों और स्कोप के साथ) में परिभाषित <dependencyManagement/>अनुभाग और उसके बाद में <dependencies/>खंड तुम सिर्फ परिभाषित groupIdऔर artifactId
16

1
अगर मुझे एक प्लगइन को दो बार निष्पादित करना है, तो क्या मुझे pluginmanagement का उपयोग करना चाहिए?
कल्पेश सोनी

@KalpeshSoni: यह निर्भर करता है - आप दो निष्पादन के बीच आम विन्यास करना चाह सकते हैं जिसे आप फिर से परिभाषित नहीं करना चाहते हैं।
सुनकर

39

आप का उपयोग pluginManagementएक में parent pomमामले से किसी में यह कॉन्फ़िगर करने के लिए child pomइसका इस्तेमाल करते हैं चाहता है, लेकिन नहीं हर बच्चे प्लगइन इसका इस्तेमाल करना चाहता है। एक उदाहरण यह हो सकता है कि आपके super pomमावेन जावाडॉक प्लगइन के कुछ विकल्पों को परिभाषित करता है।

प्रत्येक child pomव्यक्ति Javadoc का उपयोग नहीं करना चाह सकता है, इसलिए आप उन डिफॉल्ट को एक pluginManagementसेक्शन में परिभाषित करते हैं । बच्चा पोम जो कि Javadoc प्लगइन का उपयोग करना चाहता है, बस एक प्लगइन अनुभाग को परिभाषित करता है और इसमें परिभाषा से कॉन्फ़िगरेशन इनहेरिट करेगा ।pluginManagementparent pom


धन्यवाद। मैं सिर्फ एक ही pom फ़ाइल पर pluginManagement और प्लगइन टैग को देखना चाहता हूँ क्योंकि मुझे ग्रहण के लिए M2E प्लगइन के एक छोटे बग को बायपास करने की आवश्यकता है। देखें stackoverflow.com/questions/8706017/...
एंड्रिया Borgogelli Avveduti

3

pluginManagement: एक ऐसा तत्व है जो साइड प्लगइन्स के साथ देखा जाता है। प्लगइन प्रबंधन में प्लगइन तत्व बहुत समान तरीके से होते हैं, सिवाय इसके कि इस विशेष परियोजना के निर्माण के लिए प्लगइन की जानकारी को कॉन्फ़िगर करने के बजाय, यह है कि इस एक से इनहेरिट प्रोजेक्ट बिल्ड को कॉन्फ़िगर करने का इरादा है। हालाँकि, यह केवल उन प्लगइन्स को कॉन्फ़िगर करता है जो वास्तव में बच्चों में प्लगइन्स तत्व के भीतर संदर्भित होते हैं। बच्चों को प्लगइन प्रबंधन परिभाषाओं को ओवरराइड करने का हर अधिकार है।

से http://maven.apache.org/pom.html#Plugin%5FManagement

से कॉपी किया गया:

Maven2 - प्लगइन प्रबंधन और माता-पिता-बच्चे के रिश्ते के साथ समस्या

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.