2012-11-06 9 views
9

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

इस पहले उदाहरण में प्लगइन प्रबंधन पैरेंट पोम में स्थित है, कंपाइलर प्लगइन के लिए 2 निष्पादन और एंट्रिन प्लगइन के लिए 2 निष्पादन को परिभाषित करता है।

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<name>master-pom</name> 
<modelVersion>4.0.0</modelVersion> 
<groupId>plugin.test</groupId> 
<artifactId>master-pom</artifactId> 
<packaging>pom</packaging> 
<version>1.0.0-SNAPSHOT</version> 
<build> 
    <pluginManagement> 
     <plugins>    
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>execution-1</id> 
         <phase>none</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
          <includes> 
           <include>**/*</include> 
          </includes> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution-2</id> 
         <phase>none</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <configuration> 
          <source>1.5</source> 
          <target>1.5</target> 
          <includes> 
           <include>**/*</include> 
          </includes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.7</version> 
       <executions> 
        <execution> 
         <id>execution-1</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <echo message="execution 1"/> 
          </target> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution-2</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <echo message="execution 1"/> 
          </target> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </pluginManagement> 
</build> 

और बच्चे पोम:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<name>build</name> 
<modelVersion>4.0.0</modelVersion> 
<groupId>plugin.test</groupId> 
<artifactId>build</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>pom</packaging> 
<parent> 
    <groupId>plugin.test</groupId> 
    <artifactId>master-pom</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <relativePath>./master-pom.xml</relativePath> 
</parent> 
<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>execution-1</id> 
        <phase>generate-sources</phase> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>execution-1</id> 
        <phase>generate-sources</phase> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

बच्चे पोम पर चल रहा है 'स्वच्छ स्थापित mvn' संकलक प्लगइन के दोनों सज़ाएँ और केवल 1 निष्पादन चलेंगे एंट्रिन प्लगइन का, हालांकि प्रत्येक का केवल पहला निष्पादन एक चरण से बंधे थे।

अब बच्चे पोम को pluginManagement चलती:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<name>build</name> 
<modelVersion>4.0.0</modelVersion> 
<groupId>plugin.test</groupId> 
<artifactId>build</artifactId> 
<version>1.0.0-SNAPSHOT</version> 
<packaging>pom</packaging> 
<build> 
    <pluginManagement> 
     <plugins>    
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>execution-1</id> 
         <phase>none</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
          <includes> 
           <include>**/*</include> 
          </includes> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution-2</id> 
         <phase>none</phase> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
         <configuration> 
          <source>1.5</source> 
          <target>1.5</target> 
          <includes> 
           <include>**/*</include> 
          </includes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <version>1.7</version> 
       <executions> 
        <execution> 
         <id>execution-1</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <echo message="execution 1"/> 
          </target> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution-2</id> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <target> 
           <echo message="execution 2"/> 
          </target> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </pluginManagement> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>execution-1</id> 
        <phase>generate-sources</phase> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>execution-1</id> 
        <phase>generate-sources</phase> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

यह पोम वांछित व्यवहार जो प्रत्येक प्लगइन के लिए केवल 1 निष्पादन चल रहा है देता है। कंपाइलर प्लगइन (और अधिकांश अन्य) केवल उस मामले में सही तरीके से काम करते हैं जहां प्लगइन प्रबंधन उसी पोम में स्थित होता है और प्रत्येक निष्पादन चरण = किसी के लिए बाध्य नहीं होता है (संभवतः क्योंकि यह डिफ़ॉल्ट चरण में निष्पादन को बांधता है)। एंटर प्लगइन किसी भी मामले में सही तरीके से काम करता है।

प्लगइन होने के दौरान मैं इसे कैसे प्राप्त कर सकता हूं माता-पिता पोम में प्रबंधन अनुभाग और विशेष रूप से अवांछित निष्पादन को चरण = किसी भी बच्चे के पोम्स में बाध्य नहीं कर सकता? क्या यह मेवेन में एक बग है या यह व्यवहार किसी तरह से उचित है? मैंने उसी परिणाम के साथ मेवेन 3.0.4 और मेवेन 2.2.1 पर यह कोशिश की है।

+0

मैंने आपके पहले सेटअप की कोशिश की और मेरे पास केवल कंपाइलर और एंटर प्लगइन दोनों के लिए 'निष्पादन -1' था। आप कह रहे हैं कि कंपाइलर प्लगइन 'निष्पादन -1' और 'निष्पादन -2' दोनों चला गया। जैसा कि मैंने कहा, यह मेरे साथ नहीं हुआ। – maba

+0

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

उत्तर

4

प्रदान किया गया उदाहरण सही तरीके से काम करता है। मैंने फिक्स सहित माता-पिता को फिर से तैनात नहीं किया था।

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

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

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