java - अगर हमारे पास पहले से ग्रहण है तो हमें मेवेन या चींटी की आवश्यकता क्यों है?




maven ant (5)

मुझे लगता है कि यह सवाल जावा के लिए आईडीई की तुलना में विस्तार का विस्तार है , क्या हमें अभी भी चींटी की आवश्यकता है?

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

जब मैं ग्रहण में विकसित होता हूं, ग्रहण मेरे लिए सबकुछ करता है और मुझे बस रन बटन पर क्लिक करने की आवश्यकता होती है। और, ग्रहण आपको विंडोज़ के लिए एक रननेबल जार या यहां तक ​​कि .exe पर अपना कोड निर्यात करने दे सकता है।

तो मैं वास्तव में नहीं जानता कि मुझे मेवेन या चींटी की आवश्यकता क्यों है।

और अगर मुझे ज़रूरत है, तो मुझे कौन सा चुनना चाहिए, मेवेन या चींटी?


Answers

  1. क्योंकि आपका कॉलेग्यू नेटबीन या आईडीईए पसंद कर सकता है
  2. चूंकि सेटिंग्स एक ग्रहण से दूसरे में भिन्न हो सकती हैं
  3. क्योंकि आप अपनी निर्भरताओं को स्वचालित रूप से प्राप्त करना चाहते हैं
  4. क्योंकि आप पूर्ण निर्माण को स्वचालित करना चाहते हैं: बिल्ड, जार, स्थैतिक कोड विश्लेषण लागू करें, यूनिट परीक्षण चलाएं, दस्तावेज़ीकरण उत्पन्न करें, कुछ निर्देशिका में कॉपी करें, पर्यावरण के आधार पर कुछ गुणों को ट्यून करें आदि।
  5. चूंकि यह स्वचालित हो जाने पर, आप निरंतर एकीकरण प्रणाली का उपयोग कर सकते हैं जो प्रत्येक बदलाव या हर घंटे आवेदन करता है ताकि यह सुनिश्चित किया जा सके कि सबकुछ अभी भी बनाता है और परीक्षण अभी भी पास हो जाते हैं ...
  6. क्योंकि मैवेन कॉन्फ़िगरेशन पर सम्मेलन का उपयोग करता है।
  7. चूंकि आपका आईडीई आपको कुछ फैंसी कोड जनरेशन / रूपांतरण की आवश्यकता नहीं दे सकता है।
  8. क्योंकि एक बिल्ड स्क्रिप्ट बिल्ड प्रक्रिया को दस्तावेज करता है।

ग्रहण एक विकास पर्यावरण है। लेकिन यह एक निर्माण उपकरण नहीं है।

मैं व्यक्तिगत रूप से मेवेन से नफरत करता हूं, लेकिन वाईएमएमवी। कई विकल्प हैं: ग्रेडल, बिल्डर, इत्यादि।


मेवेन और चींटियों को स्क्रिप्ट बनाने के लिए उपयोग किया जाता है ताकि उन्हें जेनकिन्स या कमांड लाइन पर बैच नौकरियों में निष्पादित किया जा सके।

वास्तव में ग्रहण स्वयं प्लगइन बनाने के लिए बड़े पैमाने पर चींटी का उपयोग करता है।

यदि आप दोनों में से एक सीखना चाहते थे, तो मैवेन सीखें, यह हर दिन इन सभी का उपयोग करता है (चींटी की जगह)।


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

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

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

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

मेवेन का उपयोग करने का कोई गंभीर कारण नहीं है।

ग्रहण में निर्यात / आयात करने की सेटिंग में आसानी (कुछ टीम किसी भी मामले में किसी भी आईडीई में कुछ करना चाहिए) अलग-अलग सेटिंग्स को विकास टीम के हिस्से पर आलस्य से ज्यादा कुछ नहीं (या रिक्त स्थान बनाम टैब पर एक धार्मिक तर्क) ।

फिर, मेवेन का उपयोग करने के लिए एक गंभीर कारण नहीं है।

टीम पर्यावरण? मुझे एक ऐसी टीम दिखाएं जो पहले से ही जीआईटी या एसवीएन जैसी रिपोजिटरी का उपयोग नहीं करती है। नेक्सस रिपोज़ को सेट करके हमें कार्यक्षमता और रखरखाव सिरदर्द दोनों को डुप्लिकेट करने की आवश्यकता क्यों है?

यह वास्तव में एक अच्छा कारण है कि मैवेन का उपयोग करें।

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

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

मेवेन से बचने के लिए एक और महान कारण की तरह लगता है।

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

हां, आप मेवेन के साथ ऑब्जेक्ट कोड बना सकते हैं । आप सी या यहां तक ​​कि असेंबलर में शुद्ध ऑब्जेक्ट कोड भी लिख सकते हैं, लेकिन मुझे नहीं पता कि आप क्यों चाहते हैं।

मेवेन से बचने का सबसे अच्छा कारण परियोजनाओं के एक समूह को मिटाने के लिए आवश्यक काम की असाधारण मात्रा है जब आप ऊपर उल्लिखित सभी समस्याओं का बीमार पड़ते हैं (और कई अन्य लोगों का उल्लेख नहीं किया जाता है)।

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

ऑब्जेक्ट डेवलपमेंट को लाइव ऑब्जेक्ट वातावरण में किया जाना चाहिए, जहां एक कोड परिवर्तन का परीक्षण किया जाता है क्योंकि यह संशोधित ऑब्जेक्ट लाइव होने के बाद से सहेजा जाता है। परिनियोजन में उस माहौल से केवल कलाकृतियों को विकसित करना, एक रनटाइम बनाना शामिल है जिसमें चल रहे ऐप द्वारा विकास और परीक्षण में उपयोग की जाने वाली सभी चीजें हैं।

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

लिखने / संकलन / इकट्ठा / निर्माण / तैनाती / परीक्षण की मानसिकता को प्राप्त करना ही एकमात्र बड़ी बाधा है। एक आधुनिक मशीन की बजाय 1 9 7 9 वीटी 100 टर्मिनल पर कोडिंग करने का नाटक करने से आपको 'असली' डेवलपर नहीं बनता है, यह सिर्फ यह दर्शाता है कि आपकी विधियां 35 साल पुरानी हैं।

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


मेवेन आमतौर पर किसी विशेष एप्लिकेशन के लिए प्लगइन्स या जार बनाने के लिए उपयोग किया जाता है।

मान लीजिए कि आपने एक एप्लीकेशन विकसित किया है लेकिन आप मैन्युअल रूप से उस एप्लिकेशन के लिए आवश्यक जार जोड़ने के लिए नहीं जाना चाहते हैं। इस स्थिति में मेवेन या चींट बहुत उपयोगी है। एक बार जब आप अपना कोड लिख लेते हैं तो बस भाग लें -> मेवेन बिल्ड (मेवेन बिल्ड पर क्लिक करें), यह सभी आवश्यक प्लगइन या जार उत्पन्न करेगा और आपके एप्लिकेशन लाइब्रेरी बिल्ड-पथ में शामिल होगा। एक संदेह यह हो सकता है कि आवेदन उन जारों को कैसे प्राप्त करेगा, प्रत्येक एप्लिकेशन के लिए एक XML फ़ाइल है जिसे POM.xml नाम दिया गया है, जहां सभी जारों के संदर्भ को डाउनलोड करने के उद्देश्य से रखा जाता है।


इसकी आवश्यकता होती है जब आप कुछ संवेदनशील डेटा साझा नहीं करना चाहते हैं जो क्रमबद्धता के साथ जाते हैं।





java maven ant