2011-09-29 21 views
5

मेरे पास बहु-मॉड्यूल प्रोजेक्ट में गुणों के संबंध में कोई प्रश्न है।बहु-मॉड्यूल प्रोजेक्ट में मेवेन गुण डिफ़ॉल्ट पर रीसेट कर दिए गए हैं

निम्नलिखित 3 स्तरीय परियोजना struture पर विचार करें:

project 
+- pom.xml (packaging: pom)  //referred to as super-pom 
+- module_group 
    +- pom.xml (packaging: pom)  //referred to as group-pom 
    +- module 
     +-pom.xml (packaging: jar) //referred to as module-pom 

सुपर पोम में मैं एक संपत्ति संशोधन जो डिफ़ॉल्ट मान "अज्ञात" हो जाता है परिभाषित करते हैं।

इसके अतिरिक्त मैं buildnumber-maven-plugin घोषित करता हूं और इसका उपयोग करता हूं जो एसवीएन संशोधन प्राप्त करने के लिए कॉन्फ़िगर किया गया है और इसे संशोधन में डाल दिया गया है।

अगला मैं उस संपत्ति को प्रकट करने के लिए maven-jar-plugin कॉन्फ़िगर करता हूं।

वें मॉड्यूल-पोम में मैं buildnumber-maven-plugin का उपयोग घोषित करता हूं ताकि वास्तव में इसे निष्पादित किया जा सके।


यह सब मॉड्यूल को सीधे बनाते समय काम करता है, यानी मॉड्यूल-पोम निष्पादित करता है। मेनिफेस्ट में संशोधन है जिसमें buildnumber-maven-plugin द्वारा कंसोल में मुद्रित किया गया है।

हालांकि, अगर मैं सुपर पोम या निष्पादित समूह-पोम संशोधन प्रकट करने के लिए लिखा है के लिए डिफ़ॉल्ट मान है, हालांकि buildnumber-maven-plugin निष्पादित हो जाता है और यह सही संशोधन को पुन: प्राप्त (यह सांत्वना को यह प्रिंट से पहलेmaven-jar-plugin रन)।

तो मुझे यह महसूस हो रहा है कि बहु-मॉड्यूल परियोजनाओं में संपत्ति विरासत पर मुझे कुछ याद आ रहा है।

क्या किसी को पता है कि यहां क्या गलत हो सकता है? या क्या कोई मुझे बता सकता है कि वास्तव में उन मामलों में संपत्तियों को कैसे प्रबंधित किया जाता है (दुर्भाग्यवश मैं अभी तक एक अच्छा विवरण नहीं ढूंढ पाया)?

अद्यतन

मैं कुछ अनुसंधान और कुछ परीक्षण डिबग आउटपुट (-X विकल्प) और मैं अब तक क्या मिला से साथ चलता था, मुझे लगता है मेरी समस्या यह है:

1) के दौरान पोम में प्रयुक्त गुणों को पार्स करने के लिए उनके मूल्यों के साथ प्रतिस्थापित किया जाता है।

इस आंशिक पोम पर विचार करें:

<!-- declare the property default value --> 
<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- use the property --> 
<someconfig>${revision}</someconfig> 

बाद पोम मूल्यांकन किया जाता है, यह एक राज्य है कि इस के अनुरूप होगा में परिणाम लगता है:

<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- The property seems to be "statically" replaced --> 
<someconfig>default</someconfig> 

2) है कि वास्तविक सेट प्लगइन संपत्ति मूल्य बाद में चलता है, भले ही validate चरण के दौरान।

इस प्रकार संपत्ति स्वयं ही नए मूल्य पर सही ढंग से सेट की गई है, लेकिन यह अब और नहीं पढ़ी गई है।

3) <someconfig> का उपयोग करता है प्लगइन (मेरे मामले में यह maven-jar-plugin होगा) अब <someconfig>default</someconfig> के साथ चलता है और इस तरह यह revision बिल्कुल नहीं पढ़ता।

क्या कोई इसकी पुष्टि कर सकता है?

उत्तर

0

मैं केवल इतना कह सकता हूं कि सुपर-पोम में बिल्डनंबर-मेवेन-प्लगइन और मेवेन-जार-प्लगइन घोषित करना मेरे लिए अच्छा काम करता है, इससे कोई फर्क नहीं पड़ता कि यह समूह निर्माण या लक्षित निर्माण है या नहीं।

 <!-- Generate build number --> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>buildnumber-maven-plugin</artifactId> 
      <version>1.0</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>create</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <doCheck>false</doCheck> 
       <doUpdate>false</doUpdate> 
      </configuration> 
     </plugin> 
     <!-- Attach build number to all jars --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
        </manifest> 
        <manifestEntries> 
         <Implementation-Build>${buildNumber}</Implementation-Build> 
         <Implementation-Build-Timestamp>${maven.build.timestamp}</Implementation-Build-Timestamp> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
:

यहाँ इस सुपर पोम का एक हिस्सा (सभी परियोजनाओं के लिए एक माता पिता) है