एक ओपन-सोर्स प्रोजेक्ट में बाहरी निर्भरता को कैसे संभालेंगे?


23

जब कोई एक ओपन-सोर्स प्रोजेक्ट लिखता है और Google कोड या GitHub का उपयोग करता है, और लुआ जैसी लाइब्रेरी का उपयोग करना चाहता है, तो इसे कैसे करना चाहिए?

  • क्या निर्भरता को भंडार में शामिल किया जाना चाहिए?
  • क्या निर्भरता का निर्माण एक ही बिल्ड स्क्रिप्ट के भीतर से होना चाहिए, बाकी प्रोजेक्ट के रूप में, या एक अलग बिल्ड स्क्रिप्ट से?

यह देखते हुए कि संकलन से पहले पुस्तकालय को स्थापना की आवश्यकता नहीं है।

जवाबों:


10

मैं सबमॉडल्स पर गिट के प्रलेखन के माध्यम से पढ़ने की अत्यधिक सलाह दूंगा ; यह इस समस्या को संबोधित करता है, यह मानते हुए कि आपके सभी स्रोत Git का उपयोग करते हैं। यदि वे नहीं करते हैं, तो आप एकीकरण के उद्देश्य के लिए हमेशा एक git रेपो सेट कर सकते हैं। प्रयास तुच्छ है, और अदायगी महत्वपूर्ण है।


1
Submodules आम तौर पर और Git में निर्भरता-प्रबंधन का कमजोर कार्यान्वयन है। कम से कम गिट उपटैरी एक बेहतर पुनरावृत्ति है
आलसी बेजर

4
-1 कृपया अपने उत्तर में लिंक का विवरण शामिल करें अन्यथा लिंक गायब होने पर उत्तर बेकार है - जैसा कि अभी है। दुर्भाग्य से, मेरे पास
डाउनवोट

@Precastic: यदि आप लिंक टेक्स्ट को गूगल करते हैं, तो यह आपको सीधे नए पेज पर ले जाता है; मुझे यकीन नहीं है कि कितना अधिक जानकारीपूर्ण हो सकता है।
ब्रायन ऐज

1
कृपया stackoverflow.com/help/how-to-answer - विशेष रूप से "लिंक के लिए संदर्भ प्रदान करें" शीर्षक वाला खंड पढ़ें (उद्धरण: "हमेशा एक महत्वपूर्ण लिंक का सबसे प्रासंगिक हिस्सा उद्धृत करें, यदि लक्ष्य साइट अप्राप्य है या स्थायी रूप से ऑफ़लाइन हो जाती है" । ")
प्रीस्कैस्टिक

17

क्या निर्भरता को भंडार में शामिल किया जाना चाहिए?

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

क्या निर्भरता का निर्माण एक ही बिल्ड स्क्रिप्ट के भीतर से होना चाहिए, बाकी प्रोजेक्ट के रूप में, या एक अलग बिल्ड स्क्रिप्ट से?

जब तक स्रोत से संकलन करने के लिए एक अच्छा कारण नहीं है, तब तक precompiled संस्करण का उपयोग करें।

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

संक्षेप में: यदि संभव हो तो एक संपूर्ण स्टैंडअलोन, कार्य पैकेज प्रदान करें। यह आपके उपयोगकर्ताओं को सबसे अधिक सुविधा प्रदान करेगा।


1
@tdammers: मुझे पता है, अगर आपका एक linux system पर सॉफ्टवेयर इंस्टॉल करना पैकेज मैनेजर आपके लिए सभी काम करता है। लेकिन इसके लिए इंटरनेट कनेक्शन की आवश्यकता होती है और पैकेज एक निश्चित प्रारूप में होना चाहिए और मैंने स्पष्ट रूप से कहा है कि स्वचालन उपकरण इससे मदद कर सकते हैं। आप उदाहरण के लिए, .NET ओपन सोर्स टूल्स के लिए ऐसी प्रणाली का उपयोग नहीं कर सकते। यदि आप NHibernate या कैसल विंडसर जैसे सोर्सफोर्ज टूल्स पर एक नज़र डालते हैं, तो आप देखेंगे कि सभी निर्भरताएँ बायनेरिज़ के रूप में हैं। और यही एकमात्र उचित काम है।
फाल्कन

1
@tdammers: संयोगवश, मुझे आज यहाँ एक Linux मशीन पर OpenOffice SDK स्थापित करना है। चूंकि SDK पैकेज मैनेजर के माध्यम से स्थापित नहीं किया जा सकता है, मैंने वेबसाइट से RPM को पकड़ लिया। आपको क्या लगता है कि "rpm --install" चलाने की कोशिश करते समय मुझे पहला संदेश मिलता है? त्रुटि: विफल निर्भरताएँ: ooobasis3.3-core01 की आवश्यकता ooobasis3.3-sdk-3.3.0-9567.x86_64 - OH JOY द्वारा की जाती है!
फाल्कन

2
@ दोस्त: आप सही हैं, लेकिन अगर मैं सेटअप और स्थापना आसान था, तो इस मामले में मुझे यह अतिरेक अच्छा लगेगा। और जब आप एक निर्भरता नरक देखना चाहते हैं, तो / usr / lib निर्देशिका पर एक नज़र डालें। वहाँ सब कुछ है: अतिरेक, विध्वंस और आप यह भी नहीं जानते कि कौन सा प्रोग्राम किस परिवाद का उपयोग करता है। ज़रूर, पैकेज मैनेजर को इसे संभालने दो! लेकिन क्या होगा अगर पैकेज मैनेजर मेरे द्वारा बताए गए खुले कार्यालय के मामले में इसे संभाल नहीं सकता है। मूल रूप से इसका मतलब है कि आप खराब हैं और आपके पास कुछ स्थापित करने में मुश्किल समय होगा।
फाल्कन

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

2
@tdammers: वेब पर अनगिनत ट्यूटोरियल एक विशिष्ट लिनक्स सिस्टम पर एक विशिष्ट प्रोग्राम कैसे स्थापित करें, इस मुद्दे के गवाह हैं।
फाल्कन

3

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

हम स्वयं निर्भरता को पूर्व-संकलित करते हैं और संकलित बायनेरिज़ को उस फ़ोल्डर में स्थानांतरित करते हैं। हमारे अपने घर में साझा पुस्तकालय के साथ भी इस तरह से व्यवहार किया जाता है। इस तरह से एक ही तकनीक पूर्व-संकलित स्वामित्व वाली लाइब्रेरी, ओपन-सोर्स लाइब्रेरी और इन-हाउस लाइब्रेरी के लिए काम करती है।


जहाँ तक वास्तव में आपके प्रश्न का उत्तर देने में है कि मैंने इसे फिर से पढ़ा है, वही काम करें, और बस यह उल्लेख करें कि आपकी परियोजना में Lua के पहले से तैयार 1.3.5 संस्करण का उपयोग किया गया है।


1

क्या निर्भरता को भंडार में शामिल किया जाना चाहिए?

इसे रिपॉजिटरी (एससीएम विधि के लिए किसी भी उपयोग करने योग्य) द्वारा संदर्भित किया जा सकता है, यदि यह निर्भरता उत्पाद का अभिन्न अंग है (स्रोत-निर्भरता), न कि बाइनरी-निर्भरता, जिसे अलग से हल किया जा सकता है

क्या निर्भरता का निर्माण एक ही बिल्ड स्क्रिप्ट के भीतर से होना चाहिए, बाकी प्रोजेक्ट के रूप में, या एक अलग बिल्ड स्क्रिप्ट से?

कोई फर्क नहीं पड़ता। आप अपनी आवश्यकताओं (गति / पारदर्शिता / प्रबंधनीयता / आदि) के अनुसार किसी भी विधि को पसंद कर सकते हैं


0

एक ग्रहण की दुकान होने के नाते, हमने अभी अपनी बिल्ड / असेंबलिंग / तैनाती प्रक्रिया का प्रबंधन करने के लिए बकमिनस्टर का उपयोग करना शुरू कर दिया है।

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

अगला कदम हमारे अखंड svnभंडार को मॉड्यूलर gitरिपॉजिटरी की एक श्रृंखला में स्थानांतरित करना होगा ।

मुझे नहीं पता कि बकमिनिस्टर सबमॉड्यूल्स git(या उस मामले के लिए मर्क्यूरियल सब्रेपोस) के साथ कितना एकीकृत होगा , लेकिन यह अच्छा है कि किसी भी दिए गए घटक के लिए उपयोग किए जाने वाले वीसीएस के संबंध में बकमिनस्टर अज्ञेय है।

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