स्काला परियोजना में sbt बनाम मावेन का उपयोग करने के पेशेवरों और विपक्षों [बंद]


138

स्काला के लिए कौन सा बिल्ड टूल सबसे अच्छा है? उनमें से प्रत्येक के पक्ष और विपक्ष क्या हैं? मैं कैसे निर्धारित करूं कि उनमें से कौन सी परियोजना में उपयोग की जाए?


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

24
एक और शांत बंद प्रश्न ...
सेड्रिक एच।

14
इतने सारे अच्छे सवाल जो मैं देख रहा हूँ कि अभी बंद हैं; मैं नहीं जानता कि कौन इन लोगों को एक सवाल बंद करने या न करने का फैसला करने की शक्ति देता है। मैं यह भी ध्यान नहीं देता कि वे पास हैं या नहीं।
user1888243

2
इस बात से सहमत। इस प्रश्न के बंद होने से पहले सौभाग्य से हमारे पास 2 उत्तर हैं। जो लोग इस सवाल को बंद करने के वोट के लिए गरीब ...
hqt

जवाबों:


83

हम काम पर स्काला परियोजनाओं के निर्माण के लिए मावेन का उपयोग कर रहे हैं क्योंकि यह हमारे सीआई सर्वर के साथ अच्छी तरह से एकीकृत है। हम सिर्फ एक बिल्ड को किक करने के लिए एक शेल स्क्रिप्ट चला सकते हैं, निश्चित रूप से, लेकिन हमें मावेन से निकलने वाली अन्य जानकारी का एक गुच्छा मिला है जिसे हम CI में जाना चाहते हैं। यही कारण है कि मैं एक स्कला परियोजना के लिए मावेन का उपयोग करने के बारे में सोच सकता हूं।

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

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

संक्षेप में, बस एसबीटी का उपयोग करें जब तक कि आपको वास्तव में अपने सीआई सर्वर में तंग एकीकरण की आवश्यकता न हो।


21
मैं उपरोक्त में से किसी के साथ असहमत नहीं हूं, लेकिन सिर्फ यह बताना चाहता हूं कि मैं स्कैल्मॉक 3 लिखने की प्रक्रिया में हूं , जो प्राथमिक लक्ष्यों में से एक है, अन्य बिल्ड सिस्टम का समर्थन करना आसान बनाना।
पॉल बुचर

1
पूर्णता के लिए, यह ध्यान देने योग्य है कि ScalaMock 2 किसी भी बिल्ड सिस्टम (यह सिर्फ एक जार है) के साथ ठीक काम करता है, जब तक कि आपको जेनरेट किए गए मॉक का उपयोग करने की आवश्यकता नहीं होती है (यानी जब तक आपको केवल लक्षण या इंटरफेस को मॉक करने की आवश्यकता होती है) )।
पॉल बुचर


3
उन्होंने सिर्फ मैवेन के लिए एक वृद्धिशील संकलन क्यों नहीं लिखा? IMHO, sbt एक अनुपचारित NIH सिंड्रोम का एक पुरातत्व है ...
Cpt। सेनकफस

1
SBT के कारण CI के साथ समस्या क्यों है?
डैनियल

21

सवाल सिर्फ बहुत सारी राय पैदा करने के खतरे में है; आवश्यकताओं की स्पष्ट सूची या अपने पर्यावरण, पिछले ज्ञान, आदि का वर्णन करना बेहतर होगा।

FWIW, इस स्कैला मेलिंग लिस्ट थ्रेड में अधिक राय हैं ।

मेरी 2 सी हैं: यदि आपके पास विशिष्ट आवश्यकताएं नहीं हैं तो sbt के साथ जाएं

  • सरल परियोजनाओं के लिए, यह पूरी तरह से सरल है (आपको निर्भरता होने तक बिल्ड फ़ाइल की भी आवश्यकता नहीं है)
  • इसका उपयोग आमतौर पर स्काला ओपन सोर्स प्रोजेक्ट्स में किया जाता है। आप आसानी से अन्य लोगों की परियोजनाओं में झांक कर कॉन्फ़िगरेशन के बारे में जान सकते हैं। साथ ही कई परियोजनाएं मानती हैं कि आप sbt का उपयोग करते हैं और आपको अपनी परियोजना के लिए एक निर्भरता के रूप में उन्हें जोड़ने के लिए तैयार प्रतिलिपि + पेस्ट निर्देश प्रदान करते हैं।
  • यदि आप IntelliJ IDEA का उपयोग करते हैं, तो इसे पूरी तरह से एकीकृत किया जा सकता है। अपनी परियोजना को लगातार संकलित करने के लिए आपके पास IDEA उपयोग sbt हो सकता है , और इसके विपरीत आप IDEA परियोजनाओं को जल्दी से उत्पन्न करने के लिए sbt का उपयोग कर सकते हैं । यदि आप अपने स्वयं के अन्य पुस्तकालयों के आधार पर 'स्नैपशॉट' चक्र में हैं, जो अंतिम रूप से बहुत उपयोगी है, जो मामूली संस्करण से मामूली संस्करण तक टकराए जाते हैं - बस प्रोजेक्ट को बंद करें, संस्करण को बिल्ड फ़ाइल में अपडेट करें, फिर से चलाएँ gen-ideaकार्य, और परियोजना को फिर से खोलें: किए गए अपडेट।
  • सबसे कार्यों आप की आवश्यकता होगी (के साथ तैयार आता है compile, test, run, doc, publish-local, console) - consoleबेहतरीन सुविधाओं में से एक है।
  • कुछ लोग इस सुविधा पर प्रकाश डालते हैं कि निर्भरता स्रोत रिपॉजिटरी हो सकती है जिसे सीधे GitHub से पकड़ा गया है। मैंने इसका उपयोग नहीं किया है इसलिए यहाँ टिप्पणी नहीं कर सकता।

कुछ लोग sbt से नफरत करते हैं क्योंकि यह निर्भरता प्रबंधन के लिए Ivy का उपयोग करता है (मैं इसके पेशेवरों और विपक्षों पर टिप्पणी नहीं कर सकता, लेकिन ज्यादातर समय यह एक गैर-मुद्दा है), कुछ लोग sbt से नफरत करते हैं क्योंकि आप बिल्ड फ़ाइल को एक के संदर्भ में निर्दिष्ट करते हैं XML की जगह Scala DSL। कुछ लोग इस बात से निराश थे कि sbt का प्रारूप v0.7 से बदलकर v0.10 हो गया है, लेकिन जाहिर है, अगर आप खरोंच से शुरू करते हैं, तो माइग्रेशन आपको प्रभावित नहीं करेगा।


27
मुझे sbt से नफरत है क्योंकि इसके प्रतीकात्मक संचालकों और कुछ मूर्खतापूर्ण निर्णयों का दुरुपयोग, जैसे समर्थन और .bb और .scala दोनों परिभाषा प्रारूप हैं, लेकिन उन्हें अलग-अलग स्थानों में रखा गया है, और .sbt में दिए गए बयानों को कम से कम खाली लाइन, आदि दस्तावेजों द्वारा अलग किया जाना चाहिए। sbt में सुधार हो रहा है लेकिन इस समय पर्याप्त नहीं है। मुझे जो सबसे ज्यादा याद है वह कुछ पूर्ण (वास्तविक-विश्व परिसर के लिए न्यूनतम) है .sbt / .scala नमूना फ़ाइलों को लाइन द्वारा समझाया गया है, सभी sbt सुविधाओं को कवर करता है। उस ने कहा, मैं sbt दैनिक उपयोग करता हूं क्योंकि मावेन बहुत अधिक चूसता है।
Xiefei

6
बहुत बुरा है कि यह सवाल बंद कर दिया गया था, मुझे यकीन है कि तथ्यात्मक मतभेद भी हैं: उदाहरण के लिए मैनिंग पुस्तक से एसबीटी के बारे में यह अंश: "यदि मावेन लक्ष्यों के बीच निर्भरताएं हैं (कहते हैं कि एक लक्ष्य एक फ़ाइल का उत्पादन करता है जो दूसरे के लिए खपत होती है) तब आप मावेन के साथ अपने निर्माण को समानांतर नहीं कर सकते। sbt के साथ, आपको कार्यों के बीच एक स्पष्ट निर्भरता निर्दिष्ट करनी होगी। यह sbt को समानांतर BY DEULTULT में कार्यों को चलाने में सक्षम बनाता है। यदि कार्य A B पर निर्भर करता है, और C भी B पर निर्भर करता है, तो। sbt रन बी और उसके बाद समानांतर में A और C चलाता है। " आशा है कि यह टिप्पणी कुछ पाठकों की मदद करेगी।
jhegedus

19
मुझे यह धागा बहुत उपयोगी लगा। मैं बहुत बार सोचता हूं कि स्टैकओवरफ्लो मॉडरेटर्स धागे को बहुत उत्सुकता से बंद करते हैं। अगर वे "ऑफ़ टॉपिक" की परवाह करते हैं, तो जब वे बहुत बार ठीक वही होते हैं जो उपयोगकर्ता खोज रहे हैं (और वेब खोजों के माध्यम से पाते हैं)। यह ऐसा है मानो Stackoverflow mods जानबूझकर xkcd 979 को फिर से बनाने की कोशिश कर रहे हैं ।
विले

3
@ मेरे विचार, भी। डाउनवोटिंग, संपादन और समापन बहुत आक्रामक हो गया है।
ankush981

2
अब इसे देखने वाले किसी भी व्यक्ति के लिए, @ xiefei की शिकायतों को संबोधित किया गया है। SBT ने अधिक कस्टम ऑपरेटरों / सिंटैक्स का एक बहुत गिरा दिया है, और / sbt फाइलों में बयानों को अब व्हाट्सएप पृथक्करण की आवश्यकता नहीं है।
ग्रॉग्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.