2012-10-02 44 views
7

मैं अपने माता-पिता pom.xml में अपने सभी बच्चों के लिए प्लगइन कॉन्फ़िगर करने के लिए pluginManagement तत्व का उपयोग कर रहा हूं।मेवेन प्लगइन प्रबंधन कॉन्फ़िगरेशन विरासत अजीब व्यवहार

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-artifacts</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>some/where/else</outputDirectory> 
        <resources> 
         <resource> 
          <directory>some/another/resource</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

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

आधिकारिक दस्तावेज में कहा गया है एक प्लगइन pluginManagement में विन्यस्त अभी भी बच्चों poms में plugins तत्व को जोड़ा जाना आवश्यक है कि: उदाहरण के लिए, मैं निम्नलिखित विन्यास है। वास्तव में, अगर मैं बच्चा पोम से निकाल देने पर:

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

तो maven-dependency-plugin बंद हो जाता है install चरण में फायरिंग। हालांकि, ऐसा लगता है कि यह कुछ अन्य प्लगइन्स को प्रभावित नहीं करता है, अर्थात् maven-resource-plugin। यहां तक ​​कि अगर मैं अपने बच्चे पोम में

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

की जरूरत नहीं है, इसके copy-resources लक्ष्य अभी भी install चरण में आग और काम यह करने के लिए कॉन्फ़िगर किया गया है प्रदर्शन करती है।

यह व्यवहार क्यों मौजूद है? क्या प्लगइन की एक सूची है जो हमेशा विरासत में होती है, या शायद मुझे कुछ याद आ रहा है?

+2

अपनी समस्याओं का विश्लेषण करने के लिए प्रभावी पोम में देखें (एमवीएन सहायता: प्रभावी-पोम के माध्यम से)। – khmarbaise

+0

धन्यवाद, पूरी तरह से इसके बारे में भूल गए। एक नज़र डालेगा –

उत्तर

6

पूरा पीओएम दिखाई नहीं दे रहा है; लेकिन जिस व्यवहार का आप वर्णन कर रहे हैं वह एक जार, युद्ध या कान है, सही है? संसाधन प्लगइन डिफ़ॉल्ट रूप से उन पैकेजिंग प्रकारों के लिए परिभाषित किया गया है। इसमें एक निष्पादन शामिल है जो संसाधनों की प्रतिलिपि बनाता है (जैसा कि @ माबा द्वारा वर्णित है)।

चूंकि प्लगइन परिभाषा आपके बच्चे पीओएम में शामिल है (भले ही आपने इसे सीधे नहीं रखा है), मैवेन मेवेन द्वारा प्रदान किए गए निष्पादन के साथ <pluginManagement> अनुभाग में परिभाषित निष्पादन को विलय करता है।

documentation पैकेजिंग प्रकार द्वारा डिफ़ॉल्ट जीवन चक्र बाइंडिंग का वर्णन करता है। नोट dependency प्लगइन का उल्लेख नहीं किया गया है; लेकिन resources है; यही कारण है कि आप अंतर देखते हैं। -X के साथ चल रहा है प्लगइन निष्पादन दिखाएगा।

+0

हां, मेरा पोम पैकेजिंग जार है। इसलिए, ऐसा इसलिए है क्योंकि 'संसाधन-प्लगइन' स्वचालित रूप से शामिल किया गया है, यह स्वचालित रूप से 'प्लगइन प्रबंधन' से सभी कॉन्फ़िगरेशन भी प्राप्त करता है, है ना? फिर, मुझे लगता है, मुझे जवाब मिला। मैंने सोचा कि यह ऐसा कुछ था। आपका बहुत बहुत धन्यवाद! –

+1

@VladimirMatveev हां अन्य प्लगइन भी हैं जो डिफ़ॉल्ट रूप से भी शामिल हैं। एक स्पष्ट 'मेवेन-कंपाइलर-प्लगइन' है। – maba

+1

@VladimirMatveev मुझे लगता है कि आप यहां मूल प्लगइन्स पा सकते हैं: [मेवेन उपलब्ध प्लगइन्स] (http://maven.apache.org/plugins/index.html)। – maba

1

मैवेन हमेशा संसाधनों की प्रतिलिपि बनाता है जो डिफ़ॉल्ट रूप से src/main/resources के अंदर हैं।

Maven Getting Started Guide से

:

सरल Maven द्वारा नियोजित नियम यह है: ${basedir}/src/main/resources निर्देशिका के भीतर रखा किसी भी निर्देशिका या फ़ाइलें ठीक उसी संरचना जार के आधार पर शुरू करने के साथ अपने जार में पैक कर रहे हैं।

+0

मुझे 'src/main/resource' के बारे में पता है, लेकिन मेरी कॉन्फ़िगरेशन (शायद मुझे इसे इलिप्सिस द्वारा प्रतिस्थापित नहीं किया जाना चाहिए था, मैंने सोचा था कि यह अंतरिक्ष की अपर्याप्त अपशिष्ट है) कई फ़ाइलों को विभिन्न स्थानों पर प्रतिलिपि बनाता है, और यह यही है काम करता है कि प्लगइन बाल पोम से हटा दिया गया है। मैंने इस मामले पर अपना प्रश्न अपडेट कर लिया है। –