2012-02-10 10 views
5

निम्नलिखित उद्यम आवेदन लेयरिंग उदाहरण पर विचार करें:मेवेन परियोजना संरचना बनाने पर सलाह - एकाधिक मॉड्यूल बनाम एकाधिक परियोजनाएं?

  1. परियोजना सेवाएं -> POJO सेवाएं परत
  2. परियोजना वेब -> वेब अनुप्रयोग, पर 'परियोजना सेवाओं', एक युद्ध के रूप में तैनात निर्भर करता है
  3. परियोजना वेब सेवाओं -> वेब सेवा, पर 'परियोजना सेवाओं', एक अलग युद्ध के रूप में तैनात वर्तमान में इंटरनेट
  4. परियोजना स्टैंडअलोन से अधिक संपर्क में नहीं निर्भर करता है -> क्रॉन नौकरी, पर 'परियोजना सेवाओं'
निर्भर करता है

मेवेन में इसे व्यवस्थित करने के लिए सही दृष्टिकोण क्या होगा। क्या मुझे एक बहु-मॉड्यूल मेवेन प्रोजेक्ट बनाना चाहिए? यदि 'प्रोजेक्ट-सर्विसेज' एक मेवेन मॉड्यूल है, तो इसे अन्य तीन परियोजनाओं के साथ साझा किया जा सकता है जिनमें से प्रत्येक एक स्वतंत्र तैनाती इकाई है?

मेरी पिछली परियोजनाओं में मैंने केवल 4 अलग-अलग मेवेन परियोजनाएं बनाई हैं और कभी भी किसी और चीज की आवश्यकता महसूस नहीं हुई है।

यह सत्यापित करना चाहते हैं कि पहले जो किया गया है उससे बेहतर तरीका है या नहीं।

उत्तर

2

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

pom project (top level project that would define all of the modules) 
    jar project (project-services) 
    war project (project-web) 
    war project (project-web-services) 
    project-standalone (wasn't sure if this was a jar, or just some scripts, etc) 

तो तुम केवल निर्माण और जड़ परियोजना बंद जारी चाहते हैं, और यह आप के लिए उप मॉड्यूल के सभी का ख्याल रखना चाहते हैं। वे प्रत्येक एक दूसरे पर निर्भरता कर सकते हैं (केवल परिपत्र निर्भरताओं से सावधान रहें)। और आप बहुत ज्यादा जाने के लिए तैयार होंगे।

दूसरा विकल्प अलग-अलग कलाकृतियों को पूरी तरह से अलग करता है। लाभ एक अलग रिलीज चक्र है। यह एक अच्छा विकल्प है जब आपके पास जार लाइब्रेरी है जो अक्सर बदलती नहीं है, लेकिन आप अक्सर युद्ध को अपडेट करते हैं।

और जाहिर है, आप एक मिश्रण हो सकते हैं, तो शायद जार स्टैंडअलोन है, लेकिन आपके पास एक बहु-मॉड्यूल प्रोजेक्ट है जिसमें दो युद्ध फ़ाइलें शामिल हैं। मेवेन का लाभ यह है कि यह आपके लिए जो भी व्यावसायिक मामला है, उसे संभालने के लिए पर्याप्त लचीला है, इन्हें कैसे विभाजित किया जाना चाहिए।

0

मैं निश्चित रूप से मॉड्यूल के लिए एक परियोजना के साथ जाऊंगा ताकि यह सुनिश्चित किया जा सके कि सामान्य तृतीय-पक्ष पुस्तकालयों के उपयोग किए गए संस्करण मेल खाते हैं।

रूट के रूप में एक पीओएम-प्रोजेक्ट होने और सभी कार्यान्वयन और अन्य कलाकृतियों को साझा करने के लिए इसे आम तौर पर एकल-मॉड्यूल परियोजनाओं के अलावा सब कुछ के लिए एक अच्छा अभ्यास माना जाता है।

1

मेरे कार्यस्थल में हमारे पास कई शीर्ष स्तर की परियोजनाएं हैं जो पुस्तकालयों को साझा करती हैं (15 शीर्ष स्तर की परियोजनाएं 35 या उससे अधिक पुस्तकालयों को साझा करती हैं)। हम एक पुस्तकालय दृष्टिकोण प्रति एकल परियोजना के साथ गए थे। आज, जब हमें उन सभी को एक ही बार में छोड़ना है, तो यह एक दुःस्वप्न है।

कुछ समस्याओं का हम सामना:

  • मैन्युअल निर्भरता पता लगाने
  • उचित क्रम में रिलीज को चलाने के लिए है
  • एक विफलता पूरे रिहाई

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

+0

एक विशाल परियोजना का नकारात्मक पक्ष यह है कि आप प्रायः उन कलाकृतियों को जारी कर रहे हैं जिनमें कोई बदलाव नहीं था। मैं रिहाई के मुद्दे को समझता हूं, शायद आपके मामले में आप हर बार जब आप रिलीज करने जा रहे हैं तो हर आर्टिफैक्ट बदलते हैं ... इस मामले में यह परेशानी से कम है। लेकिन कभी-कभी जब आपको केवल एक आर्टिफैक्ट जारी करने की आवश्यकता होती है, तो उन्हें बिना किसी परिवर्तन के सभी को छोड़कर आदर्श से कम होता है। – Michael

0

चूंकि आपके पास मॉड्यूल के बीच कुछ प्रत्यक्ष निर्भरताएं हैं, इसलिए मैं बहु-मॉड्यूल प्रोजेक्ट पर भी अनुशंसा करता हूं।

जो मैं अक्सर अनुशंसा करता हूं वह मॉड्यूल के जीवन चक्र पर विचार करना है। उदाहरण के लिए: यदि आप बैच मॉड्यूल को सेवा परत से कहीं अधिक बार जारी करेंगे तो इसे अलग करने के लिए समझदारी हो सकती है। इसलिए आपको उन चीजों को छोड़ने (तैनात) करने की आवश्यकता नहीं है जिनमें कोई बदलाव नहीं था। चूंकि बैच आमतौर पर .war फ़ाइलों के समान ही तैनात नहीं होता है। लेकिन यह सेवा + बैच मॉड्यूल के जीवन चक्र पर निर्भर करता है।

ज्यादातर मामलों में कदम-दर-तरफ बढ़ते हैं। तो "सभी के लिए एक" के लिए +1