चींटी या मावेन के बजाय ग्रैडल का उपयोग क्यों करें? [बन्द है]


324

जावा पर लक्षित अन्य निर्माण उपकरण वास्तव में मुझे क्या मिलता है?

यदि आप एक अन्य टूल पर ग्रैडल का उपयोग करते हैं, तो क्यों?


6
एंड्रॉइड sdk के लिए Google ग्रैडल के साथ कूद गया। developers.google.com/events/io/sessions/325236644 । इंटेलीज ने अब ग्रेडल के लिए समर्थन जोड़ा है। यह मुख्य धारा में प्रवेश नहीं करता है (न कि केवल खिलौना परियोजनाएं)
Jayan

स्प्रिंग कलाकृतियां अब ग्रैडल द्वारा भी बनाई गई हैं, मुझे लगता है कि हाइबरनेट समान है।
अमीर पसज़ादेह

जवाबों:


248

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

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

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

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

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

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


69
@ मैं यह नहीं कह रहा था कि ग्रैडल एक खिलौना परियोजना है, लेकिन मैंने इसे केवल एक खिलौना परियोजना पर अब तक इस्तेमाल किया है। क्षमा करें आपको गुमराह महसूस हुआ
रिच सेलर

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

48
इसके लायक होने के लिए, मुझे यह आभास नहीं हुआ कि @RichSeller का मतलब ग्रैडल खिलौना परियोजनाओं के लिए था (यहां तक ​​कि वर्ग कोष्ठक में भाग पढ़ने से पहले)।
जैक लेओ

2
जब मैंने "अब तक केवल एक खिलौना परियोजना" पढ़ी, तो मुझे तुरंत यह आभास हो गया कि लेखक ग्रैडल का खुद का एक खिलौना प्रोजेक्ट होने की बात कर रहा है, खासकर इस भ्रम के बाद कि "मैं स्वयं क्रोध में ग्रैडल का उपयोग नहीं करता"। इससे पता चलता है कि लेखक क्रोध में नहीं होने पर ग्रैडल का उपयोग करता है। मैं पहले पूरे वाक्य को फिर से लिखने का सुझाव देता हूं।
osa

79

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

सबसे पहले, ग्रैडल एक निर्भरता प्रोग्रामिंग टूल है, जिसका अर्थ है कि यह एक प्रोग्रामिंग टूल है। ग्रैडल के साथ आप अपने सेटअप में किसी भी यादृच्छिक कार्य को निष्पादित कर सकते हैं और ग्रेडल सुनिश्चित करेगा कि सभी घोषित निर्भरताएं ठीक से और समय पर निष्पादित हों। आपका कोड किसी भी तरह के लेआउट (पेड़, फ्लैट, बिखरे हुए, ...) में कई निर्देशिकाओं में फैलाया जा सकता है।

ग्रैडल के दो अलग-अलग चरण हैं: मूल्यांकन और निष्पादन। मूल रूप से, मूल्यांकन के दौरान ग्रैडल उन निर्देशिकाओं में स्क्रिप्ट का निर्माण करने का मूल्यांकन करेगा, जिन्हें देखना चाहिए। निष्पादन के दौरान ग्रैडल उन कार्यों को अंजाम देगा जो मूल्यांकन के दौरान लोड किए गए हैं, जो खाते के कार्य पर निर्भरता पर निर्भर करते हैं।

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

ग्रेडल परियोजनाओं के बीच और परियोजनाओं और JAR के बीच निर्भरता का पता लगाता है। ग्रैड iBiblio एक या अपने स्वयं के रिपॉजिटरी की तरह मावेन रिपॉजिटरी (डाउनलोड और अपलोड) के साथ काम करता है, लेकिन आपके पास मौजूद अन्य प्रकार के रिपॉजिटरी इन्फ्रास्ट्रक्चर का भी समर्थन करता है।

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

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


64

यह थोड़ा विवादास्पद हो सकता है, लेकिन ग्रैडल इस तथ्य को नहीं छिपाता है कि यह पूरी तरह से विकसित प्रोग्रामिंग भाषा है।

Ant + ant-contrib अनिवार्य रूप से एक ट्यूरिंग पूर्ण प्रोग्रामिंग भाषा है जिसे कोई भी वास्तव में प्रोग्राम नहीं करना चाहता है।

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

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

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


49

ग्रैडल एंट और मावेन दोनों को अच्छी तरह से जोड़ती है, दोनों रूपरेखाओं से सर्वश्रेष्ठ लेती है। चींटी से लचीलापन और विन्यास पर निर्भरता, मावेन से निर्भरता प्रबंधन और प्लगइन्स।

इसलिए यदि आप मावेन की तरह एक मानक जावा निर्माण करना चाहते हैं, लेकिन परीक्षण कार्य में कुछ कस्टम कदम करना पड़ता है तो यह नीचे जैसा दिख सकता है।

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

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

यह चींटी का एक सुपरसेट है - आप सभी चींटी कार्यों का उपयोग निक्कर, ग्रूवी-जैसे सिंटैक्स, यानी के साथ कर सकते हैं।

ant.copy(file:'a.txt', toDir:"xyz")

या

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

35

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

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


2
व्यक्तिगत रूप से, मुझे लगता है कि ग्रहण एकीकरण ठीक है। जूनो में इसे स्थापित करना काफी सरल है।
डीजेंगोफैन

1
हालांकि लेखक ने 2 साल बाद यह जवाब लिखा है!
डेनिस

21

यह मेरा जवाब नहीं है , लेकिन यह निश्चित रूप से मेरे साथ प्रतिध्वनित होता है। यह अक्टूबर 2012 से थॉटवर्क्स की प्रौद्योगिकी रडार से है :

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


16

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

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

  • जावा डेवलपर्स के लिए ग्रूवी बहुत सहज है
  • प्रलेखन बहुत बढ़िया है
  • लचीलापन अंतहीन है

अब मैं अपने निर्माण की प्रक्रिया में जोड़ने के लिए नई सुविधाओं पर विचार करने की कोशिश में अपने दिन बिताता हूं। कितना बीमार है?


+1 के लिए " xml में स्क्रिप्ट बनाएं, यह कितना बेवकूफ है?" 2000 में, XML को अब तक की सबसे ठंडी चीज़ माना गया था, इसलिए सभी निष्पक्षता में, यह उस समय बेवकूफ से अधिक फैशनेबल लग रहा था। XML- आधारित प्रोग्रामिंग भाषा मूल रूप से लिस्प्स हैं क्योंकि उनके पास हर कमांड के लिए खुला / बंद सीमांकक है। लेकिन वे लिस्प के सुपर-वर्बोस संस्करण हैं जहां कोड के 4 वर्ण 40 वर्ण बन जाते हैं। यह सीखने का एक तरीका है कि कैसे टाइप करें, लेकिन मेरी चाय नहीं।
ग्लेनपेटर्सन

8

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

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


3

मैं एड स्टब से आंशिक रूप से सहमत हूं। ग्रैवल निश्चित रूप से मावेन की तुलना में अधिक शक्तिशाली है और अधिक लचीलापन दीर्घकालिक प्रदान करता है।

मावेन से ग्रेडिंग में जाने के लिए एक मूल्यांकन करने के बाद, हमने दो मुद्दों के लिए खुद को मावेन करने के लिए छड़ी करने का फैसला किया, जिन्हें हमने ग्रैंगल के साथ सामना किया (गति मावेन की तुलना में धीमी है, प्रॉक्सी काम नहीं कर रहा था)।


मुझे v1.2 के साथ छद्म मुद्दे थे लेकिन तब से मुझे लगता है कि यह काम कर रहा है। इतना ही, ctnlm या ऐप जैसे NTLM प्रॉक्सी मुद्दों को हल करने के लिए मावेन का एक समाधान है। ग्रैडल का यह समर्थन बॉक्स से बाहर है। हालांकि यह बहुत तुच्छ है, मुझे आश्चर्य है कि मावेन ने एनटीएलएम के आधारभूत भविष्यवाणियों के लिए इस समर्थन को कभी भी समाप्त नहीं किया।
स्किप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.