2012-06-27 16 views
5

मान लीजिए मैं Maven/ग्रहण में दो जावा परियोजनाओं:Maven के साथ एक गैर खुला स्रोत निर्भरता Bundling

  • एक खुला स्रोत आवेदन GitHub में होस्ट
  • एक छोटा सा निजी पुस्तकालय युक्त उपयोगिता कार्य करता है जो है नहीं खुला स्रोत (लेकिन जो मैं, संशोधित करने के लिए निर्माण, और एक .jar फ़ाइल के रूप में संकलित रूप जैसे पुन: वितरित अधिकार की क्या ज़रूरत है)

मैं यह संभव दूसरों का निर्माण करने के लिए करना चाहते हैं, संशोधित करने और आवेदती चलाओ चालू (और यदि वे पसंद करते हैं तो ओपन सोर्स प्रोजेक्ट में वापस योगदान दें!), लेकिन इसका मतलब है कि उन्हें लाइब्रेरी को निर्भरता के रूप में भी आवश्यकता होगी।

मैं चीजों को सरल रखना चाहता हूं, ताकि मेरे और एप्लिकेशन के उपयोगकर्ताओं के लिए बिल्ड आसान हो।

इस काम को करने का सबसे व्यावहारिक तरीका क्या है?

उत्तर

3

बंद स्रोत लाइब्रेरी को वितरित करने के लिए गिटहब पर अपना स्वयं का मैवेन रिपोजिटरी प्रदान करें जिसे आपको पुन: वितरित करने और इसे अपने प्रोजेक्ट (pom.xml) से संदर्भित करने की अनुमति है।

http://cemerick.com/2010/08/24/hosting-maven-repos-on-github गिटहब पर एक रिपॉजिटरी सेट अप करने के बारे में एक अच्छा परिचय देता है। आपको उस पोस्ट में उल्लिखित सूक्ष्म भंडार की चेतावनियों से अवगत होना चाहिए।

+0

+1 यह करने का यह बेहतर तरीका है! –

+0

क्या इस बात पर कोई नजर रखने का कोई तरीका है कि किसने या कितने लोग जिथब से कलाकृतियों को डाउनलोड कर रहे हैं? ऐसा लगता है कि जब आप रेपो क्लोन करते हैं तो जिथब केवल आंकड़े एकत्र करता है। – cosbor11

3

जब Maven के साथ काम कर के रूप में यहाँ वर्णित एक Maven भंडार प्रबंधक नेक्सस के रूप में इस तरह के का उपयोग करें और अपनी सेटिंग्स फ़ाइल कॉन्फ़िगर करने के लिए सिफारिश की है:

https://help.sonatype.com/display/NXRM3/Maven+Repositories#MavenRepositories-ConfiguringApacheMaven

इस अतिरिक्त लाभ यह है कि आप इस्तेमाल कर सकते हैं है अपनी स्थिति में किसी भी निजी कलाकृतियों की मेजबानी के लिए मेवेन रिपोजिटरी प्रबंधक।

+0

हमम लेकिन इस मामले में मैं सार्वजनिक ओपन सोर्स उपयोगकर्ताओं को आर्टिफैक्ट का उपयोग करने में सक्षम होना चाहता हूं (आदर्श रूप से उनकी सेटिंग्स को हैक किए बिना)। ऐसा करने का कोई तरीका? – mikera

+0

आप कभी भी यह सुनिश्चित नहीं कर सकते कि कोई आपके जार का दुरुपयोग नहीं करेगा (इसे संकुचित करें) – ant

+0

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

3

आपकी निजी लाइब्रेरी को आपकी परियोजना में रखना वास्तव में एक आसान समाधान होगा (उदा। <project>/lib/library-1.0.jar) और इसे system निर्भरता के रूप में शामिल करें। आप इसे अपने पोम में शामिल कर सकते हैं।

<dependencies> 
    <dependency> 
     <groupId>my.private</groupId> 
     <artifactId>library</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/library-1.0.jar</systemPath> 
    </dependency> 
    </dependencies> 

सावधानी: एक प्रणाली निर्भरता transitiv नहीं है!

प्रलेखन छोड़कर आप जार जो यह स्पष्ट रूप से शामिल है प्रदान करने के लिए है कि प्रदान की

यह गुंजाइश समान है से

। आर्टिफैक्ट हमेशा उपलब्ध है और एक भंडार में नहीं देखा जाता है।

+0

धन्यवाद, बहुत उपयोगी है। यदि मैं लाइब्रेरी प्रोजेक्ट का पुनर्निर्माण करता हूं तो लाइब्रेरी जार फ़ाइल को स्वचालित रूप से अपडेट करने का कोई अच्छा तरीका है? – mikera

+0

पारगमनशीलता के मुद्दों के कारण यह एक आसान समाधान है, लेकिन बेहतर नहीं है। लेकिन यह अनुरोध भर गया ... –

+0

@ मिकरा मुझे नहीं पता कि पुस्तकालय अद्यतन को सरल कैसे बनाया जाए। यदि आपकी लाइब्रेरी को एक नए संस्करण में रिलीज़ किया जाएगा तो आपको कुछ करना होगा - यहां तक ​​कि रिपोजिटरी दृष्टिकोण के साथ भी। आपको अपने पोम.एक्सएमएल में अपनी निर्भरता के संस्करण संख्या को अपडेट करना होगा (मान लीजिए कि आप संस्करण श्रेणियों का उपयोग नहीं करते हैं जो निर्माण को अपरिवर्तनीय बनाते हैं)। – FrVaBe

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