प्रश्न 1)
आवेदन जीवन चक्र और विज्ञप्ति प्रबंधन करने के लिए सबसे अच्छा तरीका है रिहाई प्लगइन का उपयोग करने के लिए है में मदद करता है।
जैसा कि आप जानते हैं, मैवेन दर्शन कॉन्फ़िगरेशन पर सम्मेलन है। मेवेन सम्मेलन स्नैपशॉट संस्करणों (जो एसएनएपीएसएचओटी के साथ समाप्त होता है) का उपयोग विकास के दौरान और रिलीज के लिए केवल एक गैर स्नैपशॉट संस्करण असाइन करना है।
कहें कि आप संस्करण 1.1.1 विकसित कर रहे हैं। विकास के दौरान, आप बस 1.1.1-स्नैपशॉट का उपयोग करें। मैवेन स्नैपशॉट के अपडेट का ख्याल रखेगा। यदि एक आर्टिफैक्ट रिपोजिटरी का उपयोग करते हैं, तो आप यह सुनिश्चित करने के लिए -U का उपयोग कर सकते हैं कि आपके पास स्नैपशॉट का अंतिम संस्करण हमेशा होता है।
रिलीज तैयार होने पर, रिलीज प्लगइन जेनरेट करता है और संस्करण 1.1.1 तैनात करता है और नए विकास संस्करण, जैसे 1.1.2-SNAPSHOT के साथ पीओएम अपडेट करता है।
मल्टीमुड्यूल परियोजनाओं के बारे में, दो परिदृश्य हैं: मॉड्यूल संबंधित हैं लेकिन स्वतंत्र (जैसे कई वेब अनुप्रयोग) या वे एक बड़े एप्लिकेशन या पुस्तकालय के मॉड्यूल हैं और वे संस्करण साझा करते हैं। आप बाद में रुचि रखते हैं।
इस मामले में सबसे अच्छा तरीका सिर्फ उसी संस्करण (शायद रूट) मॉड्यूल का उत्तराधिकारी है, जिसमें इसके संस्करण भी शामिल हैं। आप अभिभावक समूह का संदर्भ देते हैं: आर्टिफैक्ट: संस्करण और आप बच्चों के लिए एक संस्करण निर्दिष्ट नहीं करते हैं। आम तौर पर आप भी समूह के वारिस है, तो अपने बच्चे को पोम देख सकते हैं जैसे:
<parent>
<groupId>com.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.1.1-SNAPSHOT</version>
<relativePath>../myproject-parent</relativePath>
</parent>
<artifactId>myproject-module1</artifactId>
अब तुम सिर्फ रिहाई प्लगइन की मदद से माता-पिता का सही संस्करण की ओर इशारा करते बच्चों की देखभाल की जरूरत है।
बच्चों के बारे में जानने में सहायता के लिए, आपको बाद में दिखाए गए मॉड्यूल अनुभाग सहित अपने मूल पोम को रूट पोम बनाना चाहिए।
प्रश्न 2) मैं आम तौर पर सभी कलाकृतियों के सभी संस्करणों के साथ माता-पिता में संपत्ति घोषित करता हूं जिन्हें संदर्भित किया जा सकता है। यदि कई मॉड्यूल संस्करण साझा करते हैं, तो आपको केवल एक संपत्ति की आवश्यकता है।
<groupId>com.mycompany.myproject</groupId>
<artifactId>myproject-parent</artifactId>
<version>1.1.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<myproject.version>1.1.1-SNAPSHOT</myproject.version>
</properties>
.......
<modules>
<module>../myproject-module1</module>
...
</modules>
बच्चे
<version>${myproject.version}</version>
का उपयोग कर यह एक बहुत ही खराब व्यवहार का नवीनतम का उपयोग कर निर्भरता घोषित करने के लिए है अन्य मॉड्यूल देख सकते हैं: माता-पिता की तरह लग सकता है। मान लें कि आप संस्करण 1.1.1 के लिए ऐसा करते हैं। अब आप संस्करण 1.1.2-स्नैपशॉट के साथ काम कर रहे हैं और शायद आपके पास अपने स्थानीय रेपो में स्थापित इस संस्करण के साथ कलाकृतियों हैं।
अब किसी कारण से आपको संस्करण 1.1.1 का पुनर्निर्माण करने की आवश्यकता है, उदाहरण के लिए उत्पादन में एक बग की वजह से। आपका निर्माण नए संस्करण का उपयोग करेगा। यदि आप भाग्यशाली हैं, तो यह निर्माण को तोड़ देगा। यदि आप दुर्भाग्यपूर्ण हैं तो यह उत्पादन के लिए भी ध्यान नहीं दे सकता है।
अंतिम लेकिन कम से कम नहीं, कुछ लोग बच्चों के संस्करण घोषित करने के लिए संपत्ति मूल्यों का उपयोग करना पसंद करते हैं। यह दृढ़ता से निराश है और इसे मैवेन द्वारा चेतावनी के रूप में रिपोर्ट किया जाएगा। मैं व्यक्तिगत रूप से ऐसा कभी नहीं करता हूं। कारणों के निर्माण की पुनरुत्पादन से संबंधित भी कारण हैं और तथ्य यह है कि मैवेन मानते हैं कि एक रिलीज बिल्ड कभी नहीं बदलेगा। एक मॉड्यूल संस्करण होने के बाद बाहरी रूप से tweakable वास्तव में एक अच्छा विचार नहीं है।
संपादित करें:
मामला जब मॉड्यूल संस्करणों गठबंधन नहीं कर रहे हैं।
असल में दोनों परिदृश्य मिश्रित किए जा सकते हैं। आप उदाहरण के लिए, हो सकता है:
जनक
--- Component1
--- Component2
--- Component3
------ Comp3Module1
------ Como3Module2
------ Comp3Module3
जहां माता-पिता और तीन घटक संस्करण अलग हैं और घटक 3 के तीन मॉड्यूल पहले जैसा समझाया गया है, वही संस्करण साझा करते हैं।
प्रश्न 1) इस मामले में प्रत्येक मॉड्यूल का संस्करण स्पष्ट रूप से निर्दिष्ट होता है। जैसा कि पहले कहा गया था, यह मॉड्यूल संस्करण निर्दिष्ट करने के लिए किसी प्रॉपर्टी का उपयोग करने के लिए एक खराब प्रक्षेपण है, कारण मैं केवल शाब्दिक रूप से संस्करण निर्दिष्ट करने की अनुशंसा करता हूं। जैसा कि पहले से ही कहा गया है, संस्करण का प्रबंधन करने के लिए, रिलीज प्लगइन का उपयोग करने का सबसे अच्छा तरीका है, और इसे संस्करण नियंत्रण प्रणाली, जैसे एसवीएन के साथ एकीकृत करना है। अन्य उत्तर इसका उपयोग कैसे करें इसके बारे में विवरण देते हैं, इसलिए जब तक अनुरोध नहीं किया जाता है, तो मैं इसे और विस्तारित नहीं करूंगा।
प्रश्न 2) अनुशंसित दृष्टिकोण समान संस्करण साझा करने के मामले के लिए समझाया गया है, केवल इतना है कि आपको कई गुणों की आवश्यकता है। तरह माता-पिता देख सकते हैं:
<properties>
<myproject.group>com.mycompany.myproject</myproject.group>
<component1.version>1.1.1-RC1</component1.version>
<component2.version>1.1.1-RC2</component2.version>
<component3.version>2.0.0</component3.version>
<properties>
तो फिर तुम माता पिता में संस्करण प्रबंधन को केंद्रीकृत करने निर्भरता प्रबंधन का उपयोग कर सकते हैं।
उदाहरण के लिए, माता पिता पोम में,
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>component1</artifactId>
<version>${component1.version}</version>
</dependency>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>component2</artifactId>
<version>${component2.version}</version>
<type>war</type>
</dependency>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>comp3module1</artifactId>
<version>${component3.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>comp3module1</artifactId>
<version>${component3.version}</version>
<type>ejb-client</type>
</dependency>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>comp3module2</artifactId>
<version>${component3.version}</version>
<type>war</version>
</dependency>
</dependencies>
</dependencyManagement>
अब, किसी अन्य मॉड्यूल से किसी भी मॉड्यूल को संदर्भित करने के लिए, यह के रूप में आसान है के रूप में:
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>component1</artifactId>
</dependency>
<dependency>
<groupId>${myproject.group}</groupId>
<artifactId>comp3module1</artifactId>
<type>ejb-client</type>
</dependency>
संस्करण स्वचालित रूप से माता पिता से प्रबंधित कर रहे हैं। आपको बच्चों की निर्भरताओं में उन्हें बनाए रखने की आवश्यकता नहीं है, जो कम वर्बोज़ बन जाते हैं।
मैं आपकी प्रक्रिया को बदलने और सभी मॉड्यूल के नए आरसी करने का सुझाव दूंगा, यहां तक कि उनमें से केवल कुछ ही बदल जाएंगे। अपने रिलीज चक्र को सिंक करें और "रिलीज: तैयार करें" को आपके लिए अद्यतन संस्करण को संभालने दें। सलाह के लिए – rec
@rec धन्यवाद। यह पहले से ही एक विकल्प के रूप में मेज पर था। किसी भी विचार को पूरा करने के लिए क्या अनुरोध किया जा रहा है? –
मैंने एक $ $ {mod1 देखा है।संस्करण} 'पैरेंट पोम में परिवर्तनीय सेट, फिर बच्चे के पोम्स' $ {mod1.version} 'और निर्भरताओं के लिए, हालांकि मैवेन 3 की चेतावनियों से, मुझे यकीन है कि ऐसा करने के कई अच्छे कारण नहीं हैं। –
Rossiar