2010-08-05 12 views
5

यह एक बहु-मॉड्यूल प्रोजेक्ट में मेरा मूल pom.xml (इसका हिस्सा) है:मल्टी-मॉड्यूल प्रोजेक्ट में मेवेन चेकस्टाइल प्लगइन का उपयोग कैसे करें?

... 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-checkstyle-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>check</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
… 

यह कॉन्फ़िगरेशन रूट प्रोजेक्ट और में प्रत्येक उप-मॉड्यूल में checkstyle प्लगइन निष्पादित करने के लिए mvn निर्देशित करता है। मैं नहीं चाहता कि यह इस तरह से काम करे। इसके बजाय, मैं चाहता हूं कि यह प्लगइन केवल रूट प्रोजेक्ट के लिए निष्पादित किया जाए, और प्रत्येक सब-मॉड्यूल के लिए छोड़ा जाए। साथ ही, मेरे पास कई उप-मॉड्यूल हैं, और मुझे उनमें से प्रत्येक में प्लगइन निष्पादन को स्पष्ट रूप से छोड़ने का विचार पसंद नहीं है।

checkstylesays " के लिए प्रलेखन .. सुनिश्चित करें कि आप अपने उप मॉड्यूल में मेवेन चेकस्टाइल प्लगइन शामिल नहीं है .."। लेकिन मैं कैसे सुनिश्चित कर सकता हूं कि यदि मेरे उप-मॉड्यूल मेरी रूट pom.xml का उत्तराधिकारी है? मैं खो गया हूँ, कृपया मदद करें।

उत्तर

2

शायद आपको अपने रूट पोम को 2 अलग-अलग इकाइयों में अलग करना चाहिए: पैरेंट पोम और एग्रीगेटर पोम। आपका एग्रीगेटर पोम पैरेंट पोम से भी उत्तराधिकारी हो सकता है।

यदि आप हाइबरनेट के लिए नवीनतम प्रोजेक्ट लेआउट डाउनलोड करते हैं, तो आप इस डिज़ाइन पैटर्न को क्रिया में देखेंगे।

इस अलगाव के बाद, आप केवल एग्रीगेटर/रूट पोम में चेकस्टाइल प्लगइन को परिभाषित और निष्पादित कर सकते हैं। क्योंकि यह अब आपके submodules के माता-पिता नहीं है, यह उनके द्वारा विरासत में नहीं मिलेगा।

संपादित
उपयोग <relativePath> जब <parent>

बस प्रदर्शन के लिए

घोषित करने, नीचे एक उदाहरण हाइबरनेट परियोजना संरचना से लिया है।
पूरे वितरण यहाँ पाया जा सकता है>http://sourceforge.net/projects/hibernate/files/hibernate3

बस हां, तो आप कुछ संदर्भ है, इसलिए यहाँ अपनी निर्देशिका लेआउट के एक सबसेट है

project-root 
    | 
    +-pom.xml 
    | 
    + parent 
    | | 
    | +-pom.xml 
    | 
    + core 
     | 
     +-pom.xml 

    .. rest is scipped for brevity 

परियोजना जड़/pom.xml टुकड़ा

<parent> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-parent</artifactId> 
    <version>3.5.4-Final</version> 
    <relativePath>parent/pom.xml</relativePath> 
</parent> 

<groupId>org.hibernate</groupId> 
<artifactId>hibernate</artifactId> 
<packaging>pom</packaging> 

<name>Hibernate Core Aggregator</name> 
<description>Aggregator of the Hibernate Core modules.</description> 

<modules> 
    <module>parent</module> 
    <module>core</module> 

परियोजना जड़/माता-पिता/pom.xml टुकड़ा

<groupId>org.hibernate</groupId> 
<artifactId>hibernate-parent</artifactId> 
<packaging>pom</packaging> 
<version>3.5.4-Final</version> 

परियोजना जड़/कोर/pom.xml टुकड़ा

<parent> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-parent</artifactId> 
    <version>3.5.4-Final</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

<groupId>org.hibernate</groupId> 
<artifactId>hibernate-core</artifactId> 
<packaging>jar</packaging> 
+0

धन्यवाद, सुझाव वास्तव में अच्छा है, लेकिन अब एक और समस्या है। मेरी रूट/एग्रीगेटर प्रोजेक्ट "पैरेंट पोम" से प्राप्त नहीं हो सकता है क्योंकि यह _under_ रूट है और इमारत के पहले चक्र के दौरान उपलब्ध नहीं है .. कोई विचार? – yegor256

+0

@ FaZend.com मैंने कुछ उदाहरण जोड़े हैं। –

+1

यह आवश्यक नहीं है, आप प्लगइन कॉन्फ़िगरेशन का वारिस नहीं करने के लिए मेवेन को बता सकते हैं। –

4

लेकिन मैं कैसे सुनिश्चित करें कि अगर मेरे उप मॉड्यूल मेरी जड़ pom.xml वारिस?

सख्ती से इस सवाल का जवाब करने के लिए, आप एक <plugin> परिभाषा के अंदर एक <inherited> तत्व निर्दिष्ट कर सकते हैं। POM Reference से:

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

कुछ इस तरह:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-checkstyle-plugin</artifactId> 
    <!-- Lock down plugin version for build reproducibility --> 
    <version>2.5</version> 
    <inherited>true</inherited> 
    <configuration> 
    ... 
    </configuration> 
</plugin> 

कुछ और सलाह/टिप्पणी (है कि लागू नहीं होते):

  • आप हमेशा नीचे प्लगइन संस्करण का निर्माण reproducibility के लिए ताला चाहिए (आप कर सकते हैं इस नियम को Maven Enforcer Plugin के साथ लागू करें)।
  • लोग आमतौर पर a Custom Checkstyle Checker Configuration और/या a Suppressions Filter का उपयोग करना चाहते हैं।
  • Multimodule Configuration एक सामान्य सेटअप का वर्णन करता है जो बड़ी मल्टीमोड्यूल परियोजनाओं में कॉन्फ़िगरेशन फ़ाइलों को साझा करने की अनुमति देता है।
+0

पास्कल, सुझावों के लिए बहुत धन्यवाद, वे बहुत उपयोगी हैं (मैं पहले से ही अपने प्रोजेक्ट में उन सभी का उपयोग कर रहा हूं)! – yegor256

+0

@ FaZend.com ठीक है, आपका स्वागत है। –

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