2009-11-03 7 views
46

हमारे पास एक बहु-मॉड्यूल मेवेन प्रोजेक्ट है जो एक प्रोफ़ाइल का उपयोग करता है जो buildnumber-maven-plugin को बिल्ड नंबर बढ़ाने के लिए परिभाषित करता है और फिर इसे स्रोत नियंत्रण में जांचता है।माता-पिता मॉड्यूल पर मेवेन प्लगइन लक्ष्य निष्पादित करें, लेकिन बच्चों पर नहीं

यदि मैं पैरेंट pom.xml में प्लगइन को परिभाषित करता हूं तो यह सभी बच्चे के निर्माण के लिए भी निष्पादित करता है।

यहाँ मेरी माता पिता pom.xml है

<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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.webwars</groupId> 
    <artifactId>parent</artifactId> 
    <packaging>pom</packaging> 
    <properties> 
    <buildNumber.properties>${basedir}/../parent/buildNumber.properties</buildNumber.properties> 
    </properties> 
    <version>1.0-SNAPSHOT</version> 
    <name>Parent Project</name> 
    <profiles> 
    <profile> 
     <id>release</id> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <debug>false</debug> 
       <optimize>true</optimize> 
      </configuration> 
      </plugin> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>buildnumber-maven-plugin</artifactId> 
      <version>1.0-beta-3</version> 
      <executions> 
       <execution> 
       <phase>validate</phase> 
       <goals> 
        <goal>create</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <buildNumberPropertiesFileLocation>${buildNumber.properties}</buildNumberPropertiesFileLocation> 
       <getRevisionOnlyOnce>true</getRevisionOnlyOnce> 
       <doCheck>false</doCheck> 
       <doUpdate>false</doUpdate> 
       <format>{0, number}</format> 
       <items> 
       <item>buildNumber</item> 
       </items> 
      </configuration> 
      </plugin> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-scm-plugin</artifactId> 
      <executions> 
       <execution> 
       <phase>install</phase> 
       <goals> 
        <goal>checkin</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <basedir>${basedir}</basedir> 
       <includes>buildNumber.properties</includes> 
       <message>[Automated checkin] of ${basedir} Build version: ${major.version}.${minor.version}.${buildNumber}</message> 
       <developerConnectionUrl>...</developerConnectionUrl> 
      </configuration> 
      </plugin>   
     </plugins> 
     </build> 
    </profile> 
    </profiles> 

    <modules> 

    <module>../common</module> 
    <module>../data</module> 
    <module>../client</module> 
    <module>../webplatform</module> 
    </modules> 
... 
</project> 

उत्तर

78

पोम संदर्भ की Plugins अनुभाग में दस्तावेज़ीकृत के रूप में:

मानक से परे ग्रुप की समन्वय: artifactId: संस्करण कुछ तत्व हैं जो कॉन्फ़िगर कर रहे हैं प्लगइन या यह इसके साथ बातचीत बनाता है।

  • विरासत में मिला: सही या गलत, या नहीं, इस प्लगइन विन्यास poms जो इस एक से विरासत पर लागू होना चाहिए।

तो बस जोड़ने buildnumber-Maven-प्लगइन विन्यास को <inherited>false</inherited> बच्चों poms में विरासत से बचने के लिए:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <version>1.0-beta-3</version> 
     <inherited>false</inherited> 
     ... 
     </plugin> 
21

आप प्लगइन विन्यास को <inherited>false</inherited> जोड़ने बच्चों poms में विरासत से बचने के लिए कर सकते हैं:

 <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>buildnumber-maven-plugin</artifactId> 
     <version>1.0-beta-3</version> 
     <inherited>false</inherited> 
     ... 
     </plugin> 

या, यदि आपके प्लगइन में कई निष्पादन हैं, तो आप नियंत्रित कर सकते हैं कि कौन से निष्पादन विरासत में हैं और कौन हैं

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>parent-only</id> 
     <phase>initialize</phase> 
     <inherited>false</inherited> 
     <configuration> 
      <target> 
      <echo message="Echoed only by this module."/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>all-modules</id> 
     <phase>initialize</phase> 
     <inherited>true</inherited> <!-- Defaults to true, so you could leave this line out --> 
     <configuration> 
      <target> 
      <echo message="Echoed in this module and each child module."/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
3

बस यहाँ महान उत्तर देने के लिए एक अतिरिक्त: निष्पादन शरीर के लिए विरासत में मिला टैग जोड़कर नहीं ध्यान दें कि प्रति-निष्पादन विरासत Maven 2 में दिया गया है: http://jira.codehaus.org/browse/MNG-3959

4

है एक अंतर्निहित Maven विकल्प: mvn --help ... -N,--non-recursive Do not recurse into sub-projects

1

प्लगइन कस्टम से एक है और आप मोजो कोड प्लगइन के लिए उपयोग किया है, तो आप प्लगइन aggregator के रूप में चिह्नित कर सकते हैं; यदि अपेक्षित व्यवहार उन सभी परियोजनाओं के लिए लागू होता है जहां प्लगइन का उपयोग किया जाना है।

Mojo API Specification में उल्लेख किया है,

झंडे इस मोजो एक बहु मॉड्यूल तरीका है, यानी कुल मॉड्यूल के रूप में सूचीबद्ध परियोजनाओं के सेट के साथ निर्माण में इसे चलाने के लिए।

उदाहरण के लिए,

@Mojo(name = "createHF", inheritByDefault = false, aggregator = true) 
public class CreateHFMojo extends AbstractMojo { 

.. 

public void execute() throws MojoExecutionException, MojoFailureException { 
.... 
} 

.. 

} 

github पर विस्तृत उदाहरण।

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

  • कोई संबंधित समस्या नहीं^_^