बाजेल और ग्रैडल के बीच अंतर क्या हैं?


145

Google ने अपने बिल्ड टूल Bazel को केवल ओपन-सोर्स किया । इस उपकरण और क्या अंतर हैं Gradle ? यह क्या कर सकता है कि ग्रेडल बेहतर नहीं कर सकता है, और ग्रेडल क्या बेहतर करता है?

जवाबों:


171

डिस्क्लेमर: मैं बज़ेल पर काम करता हूं और मैं ग्रैडल से पूरी तरह परिचित नहीं हूं। हालाँकि, मेरे एक सहकर्मी ने दो प्रणालियों की तुलना लिखी थी, जिसे मैं यहाँ परानुपरित करूँगा:

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

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

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

न तो दर्शन अधिक "सही" है - जो भी उपकरण एक परियोजना के लिए उपयुक्त है, वह उस विशेष परियोजना के मूल्यों पर निर्भर करता है।

ग्रेडल ओवरव्यू

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

ग्रेडल निम्नलिखित विशेषताओं पर जोर देता है:

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

Bazel अवलोकन

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

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

Bazel निम्नलिखित विशेषताओं पर जोर देता है:

  • शुद्धता। बाजेल बिल्ड हमेशा सही उत्पादन, अवधि का निर्माण करने के लिए डिज़ाइन किए गए हैं। यदि दो उपयोगकर्ता अलग-अलग मशीनों पर एक ही Bazel झंडे के साथ एक ही निर्माण पर एक ही आह्वान करते हैं, तो वे समान परिणाम देखेंगे। वृद्धिशील बनाता है के रूप में साफ रूप से सही बनाता है, बाद के अनिवार्य रूप से अनावश्यक प्रतिपादन।
  • प्रदर्शन। बिल्ड को डिज़ाइन करने के लिए डिज़ाइन किया गया है ताकि आंतरिक रूप से संभव हो सके कि उन्हें उपलब्ध संसाधन दिए जा सकें। कार्य अपनी निर्भरता श्रृंखलाओं की अनुमति देने के समान ही समानांतर हैं। अनावश्यक कार्य को कभी भी निष्पादित नहीं किया जाता है (यानी "अप-टू-डेट" कार्यों को हमेशा छोड़ दिया जाता है)। स्थानीय मशीन सीमाओं को पार करने के लिए काम को स्वाभाविक रूप से दूरदराज के निष्पादकों तक पहुंचाया जा सकता है।
  • Reproducibility। बिल्ड के किसी भी उदाहरण को किसी भी वातावरण में ईमानदारी से पुन: पेश किया जा सकता है। उदाहरण के लिए, यदि बग रिपोर्ट कहती है कि सॉफ़्टवेयर Y का संस्करण X, उत्पादन परिवेश Z में विफल रहता है, तो एक डेवलपर विश्वास के साथ अपनी मशीन पर विश्वास कर सकता है कि वे उसी चीज़ को डीबग कर रहे हैं।

18
सार्वजनिक रूप से उपलब्ध दो प्रणालियों की तुलना है? यदि हाँ, तो क्या आप इसे साझा कर सकते हैं?
कार्लोस बार्सिलोना

43

जैसा कि लेख के लिंक मर जाते हैं, यहाँ बाजेल पर ग्रैडल टीम के विचारों का एक सारांश है (अधिकांश लेख से सीधे हटाए गए हैं, जो मार्च 2015 में प्रकाशित हुआ था):

यह Google के लिए एक समस्या को हल करने के लिए डिज़ाइन किया गया था; एक बड़े पैमाने पर अखंड codebase (एलओसी करोड़ों)।

वर्तमान में प्रदान किए गए समानांतर लाभ का बेज़ल "हमारे आगामी नए कॉन्फ़िगरेशन और घटक मॉडल" से मेल खाता होगा (लेख की तारीख को ध्यान में रखते हुए)।

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

Bazel को एक्स्टेंसिबिलिटी के लिए नहीं बनाया गया है (हालाँकि Bazel डेवलपमेंट टीम ने इस बात का आश्वासन दिया है कि वे एक्स्टेंसिबिलिटी पर काम कर रहे हैं)।

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

बाजेल केवल * निक्स है, यह विंडोज पर नहीं चलता है। यह संभावित उद्यम की एक बड़ी संख्या को समाप्त।

कोई प्लगइन पारिस्थितिकी तंत्र नहीं।


17
(कई नई भाषाएँ अब समुदाय के लिए धन्यवाद समर्थित हैं), 2. वहाँ एक प्रयोगात्मक Windows संस्करण (1. Bazel तानाना के बारे में बहुत सुधार हुआ है: इस उत्तर के लिए एक अद्यतन के रूप में, ध्यान दें कि bazel.build/versions/master/docs/ windows.html )। विंडोज समर्थन इस साल एक बहुत सुधार करना चाहिए।
लॉरेंट

3
यह उत्तर सटीक नहीं है। बाजेल एक उच्च-स्तरीय भाषा के माध्यम से विस्तार योग्य है, जिसे स्टारलार्क कहा जाता है, जो कि पायथन के समान है। प्लगइन्स का एक पारिस्थितिकी तंत्र है। Bazel विंडोज पर काम करता है। Bazel को मोनो-रेपो की आवश्यकता नहीं होती है।
sdgfsdh

2
"हमारे आगामी नया विन्यास और घटक मॉडल" है कि कभी नहीं हुआ। उन्हें लगता है कि ग्रैडल के लेख में कोई लिंक हटा दिया गया है। लेकिन 2014 में वे शायद "नियम-आधारित मॉडल कॉन्फ़िगरेशन" के बारे में बात कर रहे थे, जिसे अब हटा दिया गया है । यही कारण है कि छोटे से प्रयोग लागत Gradle एक बहुत यह लगभग समुदाय विभाजित के रूप में छमाही में।
रेनैटो

1

ग्रेड का उपयोग ज्यादातर जेवीएम इको सिस्टम (जावा, गगरूवी, स्काला, कोटलिन ...) में किया जाता है। यदि आपका प्रोजेक्ट इस क्षेत्र में है, और आपको यह सवाल पूछना है, तो ग्रैडल या मावेन एक बेहतर विकल्प होगा। एक ग्रेड बिल्ड का निवारण करने के लिए, आप केवल जावा और JVM पारिस्थितिकी तंत्र के साथ ही लड़ेंगे।

दिल में Bazel वृद्धिशील परिवर्तनों (साथ ही वितरित कैश का पता लगाने) का पता लगाने और आपको प्रतिक्रिया करने की अनुमति देता है, वृद्धिशील बिल्ड प्राप्त करने के लिए प्लगइन्स / नियम लागू करने की अनुमति देता है। सेटअप करने और इसे बनाए रखने के लिए CPP, Java और Python (Skylark) और सिस्टम एडमिन के ज्ञान में भी थोड़ा ज्ञान आवश्यक है। फिर अगर आपको सवाल पूछना है तो मुझे लगता है कि ग्रैडल या मावेन एक सस्ता निवेश होगा। Bazel के साथ आप जो भी परिभाषित कर सकते हैं, जो भी आप परिभाषित करते हैं, अधिक शक्ति, लेकिन एक कीमत पर।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.