2010-04-12 14 views
6

मान लीजिए, मैं एक खुला स्रोत परियोजना है कि कुछ पुस्तकालय पर निर्भर करता है है, इसी क्रम में कुछ मुद्दों को ठीक करने के लिए समझौता किया जाना चाहिए। मैं उसको कैसे करू? मेरे विचार हैं:एक लेआउट

  1. क्या लाइब्रेरी स्रोत मॉड्यूल के रूप में स्थापित हैं, उन्हें मेरे वीसीएस में रखें। पेशेवर: सरल। विपक्ष: मेरे रेपो में किसी तीसरे पक्ष स्रोतों, (हालांकि README में तय किया जा सकता है)
  2. 1 में की तरह, एक मॉड्यूल है, लेकिन केवल समझौता स्रोत फ़ाइलों को रखना एक समझौता जगह खोजने के लिए निर्माण प्रक्रिया को धीमा हो सकता है, कठोर, उन्हें संकलन क्लासपाथ में ऑरगिनल लाइब्रेरी जार के साथ और किसी भी तरह से लाइब्रेरी जार में * .class फ़ाइलों को प्रतिस्थापित करें। पेशेवर: पैच किए गए स्थानों को ढूंढने में तेज़ी से, आसान बनाता है। विपक्ष: कठिन कॉन्फ़िगर करने के लिए, कि जार hackery अस्पष्ट (भंडार में और अपने प्रोजेक्ट विधानसभा में पुस्तकालय जार अलग होगा)
  3. रखें मुख्य/संसाधनों में समझौता * .class फ़ाइलों, और 2 में की तरह पैकेजिंग पर प्रतिस्थापित करें)। पेशेवर: लगभग कोई नहीं। विपक्ष: वीसीएस में द्विआधारी, पैच संकलन के रूप में एक पैच किए गए वर्ग को पुन: संकलित करना मुश्किल नहीं है।

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

उत्तर

6

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

यह कॉर्पोरेट और एक ओपनसोर्स प्रोजेक्ट दोनों के लिए मैं करता हूं (और वास्तव में मैं करता हूं)। स्रोत प्राप्त करें, उन्हें एक अलग प्रोजेक्ट में वर्जन कंट्रोल के तहत रखें, उन्हें पैच करें, पैच किए गए लाइब्रेरी का पुनर्निर्माण करें (और इस जानकारी को संस्करण में शामिल करें, XYZ-patched की तरह कुछ), इसे एक रिपोजिटरी पर तैनात करें (आप इसके लिए एसवीएन का उपयोग कर सकते हैं, एक ला Google कोड), अपने पीओएम में भंडार घोषित करें और निर्भरता को अपने पैच किए गए संस्करण पर इंगित करने के लिए अपडेट करें।

इस दृष्टिकोण के साथ, आप अपने उपयोगकर्ताओं से कह सकते हैं: मेरा कोड देखें और mvn install चलाएं और उन्हें बिना किसी अतिरिक्त कार्रवाई के पैच किए गए संस्करण मिलेगा। यह आईएमएचओ सबसे साफ तरीका है (त्रुटि प्रवण नहीं, कोई वर्ग पथ आदेश गड़बड़ नहीं, बिल्ड समय की कोई वृद्धि नहीं है)।

बहुत से लोग अपने होस्ट किए गए उपवर्तन भंडार (this post में कैसे) में अपना कोड तैनात कर रहे हैं।

3

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

मैं इस और पास्कल के उत्तर से सहमत हूं।कुछ अतिरिक्त नोट्स:

  • आप मूल विरूपण साक्ष्य पर dependency:unpack उपयोग करना और फिर सम्मिलित कर सकते हैं कि आपके संकलित वर्गों के साथ आप या तो मामले में पूरे निर्भर परियोजना
  • के पुनर्निर्माण के लिए नहीं करना चाहते हैं, तो आपके pom.xml करने की आवश्यकता होगी सही ढंग से कि पुस्तकालय की निर्भरता
  • आप अभी भी अपने प्रोजेक्ट की निर्माण के हिस्से के रूप में इस एकीकृत से बचने के लिए कर सकते हैं प्रतिनिधित्व करते हैं कदम 'भंडार को तैनात'
  • सुनिश्चित करें कि आप परियोजना का लाइसेंस की कमी जब यह सब कर रही है सम्मान है!
+0

+1 अच्छा अतिरिक्त नोट्स –

संबंधित मुद्दे