मावेन के लिए एक गिट रिपॉजिटरी की संरचना करने का सबसे अच्छा तरीका


19

मुझे Git में हमारी परियोजनाओं की संरचना करने के बारे में कुछ सलाह की आवश्यकता है। हम जावा का उपयोग करते हैं और मावेन हमारा निर्माण उपकरण है। Maven थोड़े मानता है कि आपकी सभी परियोजनाओं में अंततः एक सामान्य पूर्वज होता है। मावेन एक वास्तविक ड्रामा क्वीन भी हो सकती है जब चीजें ठीक उसी तरह से सेटअप नहीं होती हैं जैसे कि अपाचे फाउंडेशन अपनी परियोजनाओं को सेट करता है (रिलीज प्लगइन का उपयोग करने वाला कोई व्यक्ति शायद जानता है कि मैं किस बारे में बात कर रहा हूं)।

हम एक शीर्ष स्तर के पैरेंट पोम चाहते हैं जो प्लगइन संस्करणों को नियंत्रित करता है और कॉन्फ़िगरेशन (रेपो कॉन्फिगरेशन, क्या कलाकृतियों का निर्माण करना है, कन्वेंशनों का नामकरण, प्लगइन संस्करण, आदि)। मावेन चाहते हैं कि हमारी सभी आईटी परियोजनाएं उस मुख्य परियोजना के सबफ़ोल्डर में हों। इसका मतलब है कि संगठन के लिए एक बड़े पैमाने पर गिट रेपो।

यह एक बहुत शोर वातावरण के लिए कर देगा। यदि असंबंधित परियोजनाओं पर दो टीमें काम कर रही हैं, तो उन्हें लगातार दूसरी टीम से विलय में खींचना होगा। आदर्श रूप में मैं प्रति प्रोजेक्ट एक रेपो लेना चाहूंगा।

लेकिन मावेन के बेहद पदानुक्रम मॉडल के साथ इस तरह की झड़पें, जो उप-परियोजनाओं को उप-फ़ोल्डर बनाने की मांग करती हैं।

मुझे कुछ सलाह की जरूरत है कि कैसे लोगों ने इन दो मॉडलों को समेट लिया है ... धन्यवाद!


2
गिट सबमॉड्यूल? git-scm.com/book/en/Git-Tools-Submodules
lwm

जवाबों:


19

आपके पास 2 विकल्प हैं:
1. गिट तरीके से: सबमॉड्यूल्स का उपयोग करें। यहाँ एक दस्तावेज है कि कैसे git सबमॉडल्स git सबमॉडुल्स को प्रबंधित करता है । मैंने व्यक्तिगत रूप से इसका उपयोग नहीं किया है, लेकिन यह आपकी समस्या के लिए उपयुक्त है।
2. मावेन तरीके से: मावेन में यह अनिवार्य नहीं है कि आपका रूट प्रोजेक्ट (कॉन्फ़िगरेशन) पदानुक्रम से आपके सभी प्रोजेक्ट्स की मूल निर्देशिका हो। आपके पास एक संरचना हो सकती है:

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

कॉन्फ़िगरेशन, प्रोजेक्ट 1 और प्रोजेक्ट 2 एक ही निर्देशिका स्तर पर हैं और प्रत्येक एक गिट रिपॉजिटरी हो सकता है। प्रोजेक्ट 1 या प्रोजेक्ट 2 का निर्माण करते समय आप प्रोजेक्ट 1 या प्रोजेक्ट 2 स्तर से मावेन कमांड चलाते हैं और मावेन माता-पिता (कॉन्फ़िगरेशन) को मावेन रिपॉजिटरी से लाने की कोशिश करेंगे, न कि मूल निर्देशिका से। आपको संस्करणों पर ध्यान देना चाहिए। मैं एक रिलीज संस्करण के साथ एक माता-पिता (कॉन्फ़िगरेशन) के संदर्भ को रखने के लिए प्रोजेक्ट 1 या प्रोजेक्ट 2 में सिफारिश करूंगा। एक रिलीज़ बनाने के लिए आपको इसे 2 चरणों में करना होगा: कॉन्फ़िगरेशन पहले और रिलीज़ प्रोजेक्ट दूसरा। Project1 और Project2 स्वतंत्र रूप से विकसित हो सकते हैं और माता-पिता के समान कॉन्फ़िगरेशन संस्करण नहीं होना चाहिए।

केवल विशेष मामलों के लिए जब आप विन्यास और प्रोजेक्ट दोनों को SNAPSHOT संस्करणों के रूप में रखना चाहते हैं, Project1 या Project2 में आप कॉन्फ़िगरेशन के स्थानीय पथ को इंगित करने के लिए <relativePath>टैग के अंदर <parent>टैग का उपयोग कर सकते हैं । मैं इसकी अनुशंसा नहीं करता क्योंकि विकास के वातावरण (कम से कम ग्रहण में मेरे लिए) पर समस्याएं पैदा करेगा

मैं अपनी अंग्रेजी के लिए माफी मांगता हूं।


3

मावेन चाहते हैं कि हमारी सभी आईटी परियोजनाएँ उस मुख्य परियोजना के सबफ़ोल्डर में हों

नहीं, मावेन केवल उन कलाकृतियों को पुनः प्राप्त करने में सक्षम होना चाहता है जिनकी उसे आवश्यकता है। ऐसा करने का सबसे अच्छा तरीका एक कलाकृति भंडार के साथ है, जैसे कि नेक्सस या आर्टिफैक्ट । प्रत्येक परियोजना का अपना जीआईटी भंडार हो सकता है।

हम एक शीर्ष स्तर के पैरेंट पोम चाहते हैं जो प्लगइन संस्करणों को नियंत्रित करता है और कॉन्फ़िगरेशन (रेपो कॉन्फिगरेशन, क्या कलाकृतियों का निर्माण , कन्वेंशनों का नामकरण, प्लगइन संस्करण, आदि) का निर्माण करता है।

आपकी असली समस्या है। कॉन्फ़िगरेशन को लागू करने के लिए एक मूल POM का उपयोग करना समझ में आता है, लेकिन बिल्ड कंट्रोल के साथ कॉन्फ़िगरेशन को संयोजित करने का कोई कारण नहीं है। वास्तव में, एक स्टैंड-अलोन मल्टी-मॉड्यूल प्रोजेक्ट को छोड़कर, मैं कहूंगा कि यह एक बहुत बुरा विचार है, सिर्फ उन कारणों के लिए जो आप राज्य करते हैं (प्लस तथ्य यह है कि आपको अपनी सभी परियोजनाओं का निर्माण करना होगा, सभी के लिए समय)।


मैं मावेन के काम करने के तरीके से पूरी तरह परिचित हूँ। और नहीं, मैं नहीं चाहता कि मेरी टीमें पूरे कोडबेस का निर्माण करें। आमतौर पर आप कम संख्या में परियोजनाओं का चयन करेंगे और उन्हें स्रोत नियंत्रण से बाहर निकालेंगे। हमारे पास तैयार कलाकृतियों की मेजबानी करने के लिए एक नेक्सस सर्वर है, इसलिए पूरे कोडबेस को बनाने का कोई कारण नहीं है। और एक बार जब आपका संगठन एक निश्चित आकार होता है, तो साझा बुनियादी ढांचे पर चलने से पैसे की बचत होती है। ऐसा करने के लिए एक केंद्रीय कॉन्फ़िगरेशन होना, यह सुनिश्चित करने का एकमात्र तरीका है कि हर बार काम करता है।
जोनाथन एस। फिशर

प्रिय @parsifal कृपया जावा बहु परत एप्लिकेशन बनाने के बारे में मेरे सवाल पर एक दृष्टि है stackoverflow.com/questions/49562268/...
Hosein Aqajani
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.