लोकप्रिय दृष्टिकोण की समस्याएं
इंटरनेट के चारों ओर आपके द्वारा पाए जाने वाले अधिकांश उत्तर आपको या तो अपने स्थानीय भंडार पर निर्भरता स्थापित करने का सुझाव देंगे या pom
अपनी परियोजना के स्रोत के साथ निर्भरता को वितरित करने के लिए "सिस्टम" गुंजाइश निर्दिष्ट करेंगे । लेकिन ये दोनों उपाय वास्तव में त्रुटिपूर्ण हैं।
आपको "स्थानीय प्रतिनिधि को स्थापित" दृष्टिकोण क्यों नहीं लागू करना चाहिए
जब आप अपने स्थानीय भंडार पर निर्भरता स्थापित करते हैं तो यह वहां बना रहता है। जब तक इस भंडार तक पहुंच होगी तब तक आपकी वितरण कलाकृतियां ठीक रहेंगी। समस्या ज्यादातर मामलों में यह रिपॉजिटरी आपकी स्थानीय मशीन पर रहती है, इसलिए किसी अन्य मशीन पर इस निर्भरता को हल करने का कोई तरीका नहीं होगा। स्पष्ट रूप से अपनी कलाकृतियों को एक विशिष्ट मशीन पर निर्भर करना चीजों को संभालने का एक तरीका नहीं है। अन्यथा यह निर्भरता उस परियोजना के साथ काम करने वाली प्रत्येक मशीन पर स्थानीय रूप से स्थापित करनी होगी जो कोई बेहतर नहीं है।
आपको "सिस्टम स्कोप" दृष्टिकोण क्यों नहीं लागू करना चाहिए
जार आप "सिस्टम स्कोप" दृष्टिकोण पर निर्भर करते हैं और न ही किसी रिपॉजिटरी में स्थापित होते हैं या आपके लक्ष्य पैकेजों से जुड़े होते हैं। इसीलिए आपके वितरण पैकेज में उपयोग के समय उस निर्भरता को हल करने का कोई तरीका नहीं होगा। मेरा मानना है कि यही वजह थी कि सिस्टम स्कोप का इस्तेमाल भी कम हो गया। वैसे भी आप एक चित्रित सुविधा पर भरोसा नहीं करना चाहते हैं।
स्थिर इन-प्रोजेक्ट रिपॉजिटरी समाधान
इसे अपने में डालने के बाद pom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
x.y.z
मावेन के ग्रुप आईडी के साथ प्रत्येक कलाकृतियों के लिए कलाकृतियों के लिए अपनी खोज में अपनी परियोजना के अंदर निम्नलिखित स्थान शामिल होंगे:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
इस बारे में विस्तार से जानने के लिए आप इस ब्लॉग पोस्ट को पढ़ सकते हैं ।
रेपो प्रोजेक्ट स्थापित करने के लिए मावेन का उपयोग करें
हाथ से इस संरचना को बनाने के बजाय, मैं आपके जार को कलाकृतियों के रूप में स्थापित करने के लिए मावेन प्लगइन का उपयोग करने की सलाह देता हूं। इसलिए, repo
फ़ोल्डर निष्पादित के तहत एक इन-प्रोजेक्ट रिपॉजिटरी में एक विरूपण साक्ष्य को स्थापित करने के लिए:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
यदि आप इस दृष्टिकोण को चुनेंगे तो आप रिपॉजिटरी घोषणा को सरल बनाने में सक्षम होंगे pom
:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
एक सहायक स्क्रिप्ट
चूंकि प्रत्येक काम के लिए इंस्टॉलेशन कमांड निष्पादित करना कष्टप्रद है और निश्चित रूप से त्रुटि प्रवण है, इसलिए मैंने एक उपयोगिता स्क्रिप्ट बनाई है जो एक lib
फ़ोल्डर से किसी प्रोजेक्ट रिपॉजिटरी में स्वचालित रूप से सभी जार स्थापित करता है, जबकि स्वचालित रूप से सभी मेटाडेटा (ग्रुपआईड, आर्टिफिशियल और आदि) को हल करता है। फ़ाइलों के नाम। स्क्रिप्ट आपके लिए कॉपी-पेस्ट करने के लिए निर्भरता xml को प्रिंट करती है pom
।
अपने लक्ष्य पैकेज में निर्भरताओं को शामिल करें
जब आप अपनी इन-प्रोजेक्ट रिपॉजिटरी बनाएंगे, तो आपने प्रोजेक्ट की निर्भरता को उसके स्रोत के साथ वितरित करने की समस्या को हल कर दिया होगा, लेकिन तब से आपकी प्रोजेक्ट की लक्षित कलाकृति गैर-प्रकाशित जार पर निर्भर करेगी, इसलिए जब आप इंस्टॉल करेंगे एक रिपॉजिटरी के लिए इसमें अनार्यनीय निर्भरताएं होंगी।
इस समस्या को हराने के लिए, मैं आपके लक्ष्य पैकेज में इन निर्भरताओं को शामिल करने का सुझाव देता हूं। यह आप या तो असेंबली प्लगइन के साथ कर सकते हैं या OneJar प्लगइन के साथ बेहतर कर सकते हैं । वनजार पर आधिकारिक दस्तावेजीकरण को समझना आसान है।