java - मेवेन पर बैकमिन्स्टर क्यों चुनें?




maven-2 build-automation (5)

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

दरअसल, आप स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि आप मेवेन में कहां रखेंगे डिफ़ॉल्ट स्थान केवल यही है, डिफ़ॉल्ट, ओवरराइड करने में आसान है, हालांकि शायद ही कभी इसका एक अच्छा कारण है।

बकमिन्स्टर - यह मेरे लिए स्पष्ट नहीं है कि बैकमिन्स्टर कैसे तय करता है कि उसे किस प्रकार बनाना है और उसे कैसे बनाया जाए। ऐसा प्रतीत होता है कि यह एक ही करने के लिए ग्रहण प्रक्रिया के साथ संरेखित होगा। बैकमिन्स्टर भी चींटी के उपयोग की अनुमति देता है, लेकिन यह स्पष्ट नहीं है कि यह एक आवश्यकता है। बहुत कम से कम, जीवन चक्र कम (संयुक्त राष्ट्र?) अच्छा या बुरा के लिए परिभाषित है, और अधिक लचीलेपन की अनुमति देता है।

मुझे लगता है कि मावेन समझदार चूक के दर्शन का पालन करने की आदत है जो आसानी से ओवरराइड हो जाते हैं।

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

मेवेन की वास्तविक ताकत निर्भरता के प्रबंधन में है और यह कई उपप्रोजेक्ट्स के साथ जटिल परियोजनाओं में विशेष रूप से अच्छी तरह से चमकना पड़ती है। यह उपप्रोजेक्ट के पदानुक्रम को परिभाषित करना बहुत आसान है और यह सिर्फ काम करता है।

प्रलेखन: वे दोनों खराब हैं ;-)

इससे असहमत नहीं हो सकता!

मैं कई महीनों के लिए मैवेन का उपयोग कर रहा हूं और मैं इसे सहज तरीके से और व्यावहारिक तरीके से कैसे काम करता है, इस बारे में काफी सहज हूं।

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

मैवेन और बैकमिन्स्टर दोनों आपको निर्भरता को निर्दिष्ट करने की क्षमता प्रदान करते हैं और आम तौर पर बिल्ड, परीक्षण और संभावित रूप से तैनात प्रक्रियाओं का प्रबंधन करते हैं।

इन दोनों के पास ग्रहण एकीकरण है और दोनों (केवल मैवेन का इस्तेमाल करते हुए), ग्रहण आधारित परियोजनाओं और उनकी निर्भरता के सेटअप और साझाकरण को तुच्छ बनाना चाहिए।

प्रमुख अंतर जो मैं देख सकता हूं:

  • निर्भरता:

    • बैकमिन्स्टर निर्भरता के लिए मेवेन रिपॉजिटरी को संदर्भित करने में सक्षम होने के अलावा स्रोत रिपॉजिटरी में रहने वाली निर्भरताओं को निर्दिष्ट कर सकता है और यह अपनी तरह की रिपॉजिटरी है।
    • बैकमिन्स्टर वर्चुअल डिस्टर्स में निर्भरताएं समूह कर सकते हैं और यह भी मंच से अवगत है। सॉफ़्टवेयर का समूह निश्चित रूप से मावेन के साथ उन पेमों में संभवतः संभव होता है जो अन्य निर्भरताओं का संदर्भ देते हैं और उन्हें समूह कहते हैं।
  • निर्माण

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

    • मैवेन में कई विभिन्न प्रकार के स्वचालन के लिए जीवनचक्र के सभी चरणों के लिए प्लग-इन का एक बहुत व्यापक सेट है, जो कोडिंग से लेकर परीक्षण के लिए एम्बेडेड सेवाओं को चलाने के लिए है।
    • बैकमिन्स्टर प्लगिन की एक ही अवधारणा को प्रकट नहीं करता है वहाँ पाठकों और अभिनेता हैं, लेकिन वे एक ही भूमिका निभा नहीं लगता। बैकमिन्स्टर की चींटी के लिए उपलब्ध प्लगइन्स के व्यापक सेट तक पहुंच होनी चाहिए। यह स्पष्ट नहीं है कि बाकमिन्स्टर प्रक्रियाओं के बाकी हिस्सों के साथ चींटी कार्यों को कितनी अच्छी तरह एकीकृत किया जा सकता है (यह भी मवेन एपी प्लगइन के लिए एक मुद्दा है)।
  • तैनाती

    • मावेन में सॉफ़्टवेयर (असेंबलियों) के वितरकों को पैदा करने और उन्हें (वैगनों) के आसपास चलने के लिए कई प्लग-इन हैं। क्या बकमिन्स्टर को चींटी से यह सब मिलता है?
  • जटिलता

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

    • वे दोनों बुरे हैं ;-)
    • बकमिन्स्टर बहुत उथले, प्रलेखन-वार है। पर्याप्त उदाहरण उपलब्ध नहीं हैं
    • मैवेन प्लग इन में बहुत खराब प्रलेख हैं, जिससे उन्हें सही ढंग से चलने में मुश्किल हो रही है।

मेरे परिप्रेक्ष्य में से, मैं जो कुछ बकिंन्सस्टर के साथ करना चाहता हूं मैं मावेन के साथ क्या कर सकता हूँ संस्करण नियंत्रण से "भौतिक बनाना" एक प्लस है, लेकिन किसी संगठन के भीतर डेवलपर्स एक दूसरे के साथ साझा करने के लिए मेवेन स्नैपशॉट को एक दूसरे से साझा करने के लिए प्रकाशित कर सकते हैं, केवल निश्चित संस्करण प्रदान करने के अलावा

मेवेन जीवनचक्र के सिकुड़ने से अधिक लचीलापन और आज़ादी लगती है (कभी भी एक दूसरे चरण को जोड़ना चाहती थी, जैसे सफाई के लिए पोस्ट-टेस्ट? कोर में उन्हें करने के लिए इंतजार करना होगा)।

मैं क्या खो रहा हूँ? क्या बकमिन्स्टर में कुछ बड़ी कार्यक्षमता है जो कि जटिलता में कदम लायक है?

क्या कोई उपरोक्त बेतुका बयान दिया गया है (बशर्ते कि मैं बैकमिन्स्टर उपयोगकर्ता नहीं हूं और केवल एक कम मध्य स्तर वाले मेवेन उपयोगकर्ता) हूं?


संक्षेप में बैकमिन्स्टर की मेरी ( बेहद सीमित ) समझ यह है कि यह टीम के सदस्यों के बीच परियोजनाओं के एक सेट के लिए ईलिपस प्रोजेक्ट कॉन्फ़िगरेशन को संस्करण और साझा करने के लिए एक प्रणाली है। यह मेवेन के साथ ओवरलैप करने के लिए प्रतीत होता है कि यह निर्भरता का प्रबंधन करता है, लेकिन मुझे लगता है कि ये ईक्लिप्स परियोजना स्तर निर्भरता हैं और जावा निर्भरता नहीं हैं।

मैं व्यक्तिगत रूप से अपनी बिल्डिंग प्रक्रिया को ग्रहण या किसी अन्य आईडीई के लिए टाई नहीं करना चाहता हूं। एक आईडीई या किसी अन्य जीयूआई उपकरण की आवश्यकता के बिना एक कमांड लाइन उपकरण से पूर्ण निर्माण करने में सक्षम होने के लिए बहुत सारे लाभ हैं

निशुल्क ओ रेली बुक मेवेन: द डेफिनिटि गाइड शानदार लिखा गया है और वास्तव में मेवेन दस्तावेज अंतराल में भरता है।


कुछ स्पष्टीकरण

  • निर्भरता

    बैकमिन्स्टर में अपनी खुद की एक रिपोझिटरी प्रकार नहीं है इसकी एक खोज तंत्र है जो मौजूदा मेटा-डेटा का अनुवाद करता है जैसे कि मावेन पीओएम को एक मॉडल में जो कि बैकमिन्स्टर द्वारा समझा जा सकता है यह मेटा-डेटा XML फ़ाइल के रूप में वर्बैटिम को जोड़ा जा सकता है, अगर इसे किसी भी अन्य तरीके से प्राप्त नहीं किया जा सकता है।

  • निर्माण

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

    मुझे पूरी तरह आश्वस्त नहीं है कि बेकमिन्स्टर बिना बेकार बिल्ड के लिए अधिक सामान रखता है। वास्तव में, मुझे लगता है कि विपरीत अधिक आम है खाली मशीन पर मेवेन के साथ बिल्डिंग अक्सर बहुत बड़ी संख्या में घटकों के डाउनलोड के साथ शुरू होती है, भले ही हाथ में कार्य तुच्छ है।

  • प्लगइन्स

    बैकमिन्स्टर ओएसजीआई पर आधारित है और एक्लिप्स एक्सटेंशन पॉइंट्स का इस्तेमाल करते हुए विस्तारित है। यह तंत्र के उपयोग के नए प्रकार के रिपॉजिटरीज, नए प्रकार के कार्यों, नई खोज तंत्र और अधिक जोड़ना संभव है।

  • जटिलता

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

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

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


बैकमिन्स्टर डाउनलोड पृष्ठ से उपलब्ध पीडीएफ में एक बकमिन्स्टर बुक है - प्रलेखन के 250 से अधिक पृष्ठों और परिचय और विस्तृत संदर्भ दस्तावेज़ीकरण दोनों शामिल हैं।

इसे यहां से डाउनलोड करें: http://www.eclipse.org/downloads/download.php?file=/tools/buckminster/doc/BuckyBook.pdf


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

मैं विषय के बारे में एक अच्छी अवलोकन पाने के लिए राल्फ के ट्यूटोरियल का इस्तेमाल किया।

लक्ष्य प्लेटफार्म

राल्फ के ट्यूटोरियल में हडसन और बैकमिन्स्टर सेटअप कैसे किया जा सकता है OutOfMemoryErrors को रोकने के लिए, छोटी युक्ति, अपने Buckminster स्थापना के "अतिरिक्त पैरामीटर" में -Xmx1024m को जोड़ें ( समस्या निवारण टिप हडसन को स्मृति से बाहर देखें)।

मेरे पास अन्य नौकरियों के लिए मेरे लक्षित प्लेटफ़ॉर्म को प्रकाशित करने के लिए अलग-अलग शैली है। "स्रोत-कोड-प्रबंधन" अनुभाग में मैं उस सुविधा का चेकआउट करता हूं जिसमें मेरी लक्ष्य परिभाषा होती है (मेरे मामले में ch.scodi.client.site)।
वास्तव में लक्ष्य परिभाषा को हल करने के लिए, मैंने निम्नलिखित आदेश के साथ "रन बक्किंस्टर रनिंग" का एक कदम उठाया:

importtargetdefinition -A '${WORKSPACE}ch.scodi.client.site/TargetDefinition.target'

पोस्ट-बिल्ड-एक्शन में "आर्काइव एंड .metadata/.plugins/org.eclipse.pde.core/.bundle_pool टारगेट प्लेटफ़ॉर्म को प्रकाशित करें" और " .metadata/.plugins/org.eclipse.pde.core/.bundle_pool पथ के रूप में जोड़ा गया।

विचार करें कि TargetDefinition निर्देशिका स्थानों को हल नहीं कर सकता। मेरी लक्ष्य परिभाषा के लिए एक निर्देशिका स्थान है जिसमें springsource repository से बंडलों शामिल हैं
मैंने आरमैप फ़ाइल का उपयोग करने के लिए भौतिक बनाने के दौरान बंडलों को प्राप्त करने की कोशिश की लेकिन उसमें कुछ परेशानी थी, इसलिए मैंने उन बंडल के लिए एक स्वयं अपडेट साइट बनाने का निर्णय लिया और इस साइट को लक्ष्य परिभाषा में जोड़ दिया। उस पर अधिक यहां पाया जा सकता है:
http://www.eclipse.org/forums/index.php?t=msg&th=164508&start=0&

उत्पाद का निर्माण

लक्ष्य परिभाषा नौकरी चलने के बाद, हम उत्पादों का निर्माण शुरू कर सकते हैं।
यह बहुत सीधे आगे है, एसआरएएन से अपने स्रोत को चेक करने के लिए राल्फ के ट्यूटोरियल देखें।
मेरे प्रत्येक, सर्वर और क्लाइंट उत्पाद के लिए तीन अलग-अलग बिल्ड हैं: एकीकरण, रात और रिलीज
प्रत्येक के लिए प्लग-इन क्वालिफायर अलग होना चाहिए (जैसे I20100326-2, N20100326, R20100326-01)। इसे पूरा करने के लिए मैंने बहने वाले प्लग-इन स्थापित किए:
http://wiki.hudson-ci.org/display/HUDSON/Version+Number+Plugin
एकीकरण नौकरी में मैं "एक स्वरूपित संस्करण संख्या बनाएँ" का चयन करता हूं जिसे "संस्करण" नाम दिया जाता है और इस तरह I${BUILD_YEAR, XXXX}${BUILD_MONTH, XX}${BUILD_DAY, XX}-${BUILDS_TODAY} प्रारूप के रूप में कुछ का उपयोग करता I${BUILD_YEAR, XXXX}${BUILD_MONTH, XX}${BUILD_DAY, XX}-${BUILDS_TODAY}

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

import '${WORKSPACE}source/scodi-rcp/features/ch.scodi.client.site/site.cquery'

build

perform -D target.os=* -D target.ws=* -D target.arch=* -D
qualifier.replacement.*=${version} ch.scodi.client.site#site.p2.zip
perform -D target.os=win32 -D target.ws=win32 -D target.arch=x86
ch.scodi.client.site#create.product.zip perform -D target.os=win32 -D
target.ws=win32 -D target.arch=x86_64
ch.scodi.client.site#create.product.zip

नोटिस qualifier.replacement.*=${version} com.softmodeler.model_1.0.0.I20100325-3.jar , यह com.softmodeler.model_1.0.0.I20100325-3.jar / एक्लिप्स को क्वालिफायर के रूप में मेरे स्वरूपित संस्करण का उपयोग करने के लिए और इस com.softmodeler.model_1.0.0.I20100325-3.jarcom.softmodeler.model_1.0.0.I20100325-3.jar नामित प्लग-इन में परिणाम com.softmodeler.model_1.0.0.I20100325-3.jarcom.softmodeler.model_1.0.0.I20100325-3.jarcom.softmodeler.model_1.0.0.I20100325-3.jar , यह आवश्यक है कि Bundle-Version: 1.0.0.qualifier बंडल manifest में परिभाषित किया गया है।

http://flaviodonze.blogspot.ch/2010/03/building-products-with.html






buckminster