यदि आपके एंड्रॉइड प्रोजेक्ट को मावेन या एसबीटी (या एंट के अलावा कुछ और) का उपयोग करके संकलित और बनाया गया है, तो आप पहले से ही "आउट ऑफ द बॉक्स" नामक क्या निर्भरता प्रबंधन तंत्र का उपयोग कर रहे हैं। हालाँकि, यदि आप चींटी का उपयोग करते हैं, या केवल ADT प्लग-इन का उपयोग करके एक्लिप्स में एप्लिकेशन का निर्माण करते हैं, तो आपके पास ऐसी कार्यक्षमता नहीं है, और प्रोजेक्ट के रूट में लिबास मैन्युअल रूप से भरा हुआ है, और निश्चित रूप से मावेन का उपयोग करने के लिए स्विच करने की कोई इच्छा या क्षमता नहीं है। फिर, क्या यह संभव है कि जार फ़ाइलों को मैन्युअल रूप से संग्रहीत न करें, उन्हें रखने के लिए नहीं, बाइनरी, वीसीएस में, उन्हें स्वयं को प्रोजेक्ट सेटिंग्स में "बिल्ड पथ" में जोड़ने के लिए नहीं? बेशक, क्या सवाल हैं!
मुझे लगता है कि "बड़े" जावा की दुनिया में, कई लोगों ने
आइवी - "फुर्तीली निर्भरता प्रबंधक" नामक एक उपकरण के साथ सुना या यहां तक कि काम किया है। वैसे, यदि आप एसबीटी का उपयोग करते हैं, तो आप स्वचालित रूप से आइवी का उपयोग करते हैं, बस इसके बारे में नहीं जानते हैं। आइवी क्या कर सकता है? मोटे तौर पर, यह ठीक एक बात के लिए है - तीसरे पक्ष के पुस्तकालयों पर आपकी परियोजना की निर्भरता का प्रबंधन। आइवी एक बिल्ड सिस्टम नहीं है, यह केवल इसे पूरक कर सकता है।
यदि कोई प्रोजेक्ट एक या दो पुस्तकालयों का उपयोग करता है, तो शायद आईवी जैसे एक उपकरण का उपयोग करने से आपको एक अनावश्यक "ओवरहेड" लगेगा, हालांकि, यह बहुत आसान कर सकता है यदि आपकी परियोजना बढ़ती है और किसी तीसरे पक्ष द्वारा प्रदान की गई कार्यक्षमता को "प्राप्त" करती है।
ट्रेनिंग
हमारा लक्ष्य एक ऐसा एप्लिकेशन होगा जिसे ग्रहण और कंसोल दोनों से बनाया जा सकता है। कंसोल से आइवी के साथ काम करने के लिए, हम चींटी का उपयोग करेंगे, जिसे इस बारे में सूचित करने की आवश्यकता है - मैंने सिर्फ
~ / .ant / lib / में
ivy.. डाला है। हमें JSch लाइब्रेरी (ssh2 कार्यान्वयन) -
jsch.jar की भी आवश्यकता हो सकती है, जिसे
~ / .ant / lib / में भी डाला जा सकता है। पुराने संस्करणों का उपयोग न करें, उनके साथ समस्याएं थीं। इस स्तर पर अधिक, कुछ भी करने की आवश्यकता नहीं है, हम प्रोजेक्ट सेटअप पर आगे बढ़ते हैं।
समायोजन
अगला कदम, हमें प्रयुक्त पैकेज रिपॉजिटरी के साथ काम करने के लिए आइवी को कॉन्फ़िगर करना होगा। इसके लिए एक तथाकथित है।
रिज़ॉल्वर - रिपॉजिटरी का विवरण जो उनके URL, संरचना और अन्य विशेषताओं को निर्दिष्ट करता है। हमारे उदाहरण के लिए, मैंने 3 पुस्तकालयों का इस्तेमाल किया - ZXing, ACRA और RoboGuice को चुना। बाद में
mvnrepository.com पर पाया जा सकता है, अन्य दो अपने मावेन-संगत रिपॉजिटरी का उपयोग करते हैं। आइवी सेटिंग्स फ़ाइल को
ivysettings.xml कहा जाता है और निर्देशिका में
build.xml के साथ स्थित है - हमारे मामले में, यह परियोजना की जड़ है। इस उदाहरण के लिए इसकी सामग्री यहां दी गई है:
<ivysettings> <resolvers> <ibiblio name="maven2" m2compatible="true" /> <url name="acra" m2compatible="true"> <artifact pattern="http://acra.googlecode.com/svn/repository/releases/[organization]/[module]/[revision]/[module]-[revision].jar" /> </url> <url name="zxing" m2compatible="true"> <artifact pattern="http://mvn-adamgent.googlecode.com/svn/maven/release/[organization]/[revision]/[module]-[revision].jar" /> </url> <chain name="chained" returnFirst="true"> <resolver ref="maven2" /> <resolver ref="acra" /> <resolver ref="zxing" /> </chain> </resolvers> <settings defaultResolver="chained" /> </ivysettings>
Ibiblio
रिज़ॉल्वर आइवी पैकेज से
मानक है और maven.org और अन्य पर स्थित भंडारण सुविधाओं को जोड़ता है। इसके अलावा, ZXing और ACRA के साथ स्टोरेज कॉन्फ़िगर किए गए हैं।
पैटर्न विशेषता पर ध्यान दें, जो रिपॉजिटरी की संरचना को परिभाषित करता है। इसके अलावा, रिज़ॉल्वर को एक
जंजीर श्रृंखला में जोड़ा जाता है, जो वांछित पैकेज की खोज करते समय भंडारण के माध्यम से छंटनी के क्रम को निर्धारित करता है।
इसलिए, रिपॉजिटरी को कॉन्फ़िगर किया गया है, फिर हम स्वयं निर्भरता का वर्णन करेंगे। ऐसा करने के लिए,
ivy.xml फ़ाइल (
ivysettings.xml के समान निर्देशिका में)
बनाई गई है । इसकी सामग्री:
<ivy-module version="2.0"> <info organisation="com.example" module="ivy-android-example" revision="0.1" /> <dependencies> <dependency org="org.acra" name="acra" rev="4.2.3" /> <dependency org="com.google.inject" name="guice" transitive="false" rev="2.0-no_aop" /> <dependency org="org.roboguice" name="roboguice" rev="1.1.2" transitive="false" /> <dependency org="com.google.zxing.core" name="core" rev="1.6" /> </dependencies> </ivy-module>
जानकारी अनुभाग आवश्यक है, और इसका उद्देश्य, मुझे लगता है, उदाहरण से स्पष्ट है। इसके पीछे स्वयं निर्भरता का वर्णन है। अधिक मूल्य पर रोक और
लुटेरा । पहला पुस्तकालय दूसरे के लिए एक निर्भरता है, और उनमें से दो काम करने के लिए पर्याप्त हैं (स्वयं रोबोग्यूइस के प्रलेखन के अनुसार), लेकिन इसकी निर्भरता को "पुल" करेगा, क्योंकि दोनों पैकेज
ट्रांजिटिव = "गलत" विशेषता के साथ पंजीकृत हैं, जो उनके लिए निर्भरता के आगे के संकल्प को रोकता है। इस कॉन्फ़िगरेशन के साथ, अतिरिक्त पैकेज
-javadoc और
-source , यदि
कोई हो , भी प्रदान किया जाएगा। यदि आपको उनकी आवश्यकता नहीं है, तो आपको
ivy.xml में
कॉन्फ़िगरेशन अनुभाग जोड़ने और एक खाली कॉन्फ़िगरेशन बनाने की आवश्यकता है:
<configurations> <conf name="default" visibility="public" /> </configurations>
और निर्भरता विवरण के लिए विशेषता
conf = "डिफ़ॉल्ट" जोड़ें।
अंतिम चरण प्रोजेक्ट के
बिल्ड .
xml को संशोधित करना होगा (यह कैसे उत्पन्न किया जाए यह आधिकारिक दस्तावेज में वर्णित है)। हालांकि, यदि आप चींटी का उपयोग करने की योजना नहीं बनाते हैं, तो आप इस चरण को छोड़ सकते हैं। सबसे पहले, परियोजना विवरण में आइवी नामस्थान जोड़ें:
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="IvyAndroidExample" default="help">
और एक नया लक्ष्य जोड़ें:
<target name="resolve" description="--> retrieve dependencies with ivy"> <ivy:retrieve /> </target>
अंतिम स्पर्श के रूप में, हम अपने लक्ष्य को एप्लिकेशन बिल्ड प्रक्रिया में जोड़ सकते हैं (यदि आप चींटी का उपयोग करके कोई प्रोजेक्ट बना रहे हैं):
<target name="-pre-build" depends="resolve" />
अब, यदि आप प्रोजेक्ट के रूट डायरेक्टरी में कमांड चलाते हैं
$ चींटी का संकल्प
फिर आपको पैकेज लोड करने की प्रक्रिया को देखना चाहिए, और परिणाम पुस्तकालयों के जार फाइलों से युक्त होने वाली
कामगार निर्देशिका होनी चाहिए।
ग्रहण एकता
आरंभ करने के लिए, आपको ग्रहण के लिए
IveDE प्लगइन स्थापित करना
होगा । प्लगइन एक्लिप्स मार्केटप्लेस में उपलब्ध है। स्थापना के बाद, "सभी निर्भरता का समाधान करें" बटन टूलबार में दिखाई देना चाहिए:

अब, प्रोजेक्ट के लिए निर्भरताएं कनेक्ट करें: प्रोजेक्ट गुण खोलें ->
जावा बिल्ड पाथ ->
लाइब्रेरी टैब पर जाएं -> जो सूची दिखाई दे रही है,
उसमें लाइब्रेरी ->
जोड़ें ,
IvyDE प्रबंधित निर्भरताएं चुनें -> अगला क्लिक करें। अगला, हमें
ivy.xml फ़ाइल के स्थान और अन्य सेटिंग्स के बारे में पूछा जाएगा। इस मामले में, आप सब कुछ छोड़ सकते हैं जैसा कि यह है और
सेटिंग्स टैब पर जाएं, जिसमें
आइवी सेटिंग्स पथ संपत्ति में हमारे
ivysettings.xml फ़ाइल का पथ निर्दिष्ट करें। उसके बाद, आप समाप्त पर क्लिक कर सकते हैं। अब, सभी लाइब्रेरी जो कि
ivy.xml में निर्भरता के रूप में पंजीकृत थीं, परियोजना से जुड़ी होनी चाहिए और पैकेज एक्सप्लोरर में दिखाई देनी चाहिए:
Ivy.xml में परिवर्तन करते
समय, ग्रहण आइवी संकल्प कार्य को चलाएगा। आप इसे प्रोजेक्ट के
build.xml को जोड़कर चींटी दृश्य का उपयोग करके भी लॉन्च कर सकते हैं।
स्थानीय भंडारण
अक्सर ऐसा होता है कि आवश्यक लाइब्रेरी सार्वजनिक रिपॉजिटरी में नहीं होती हैं, या हो सकता है कि आप अपने प्रोजेक्ट की किसी अन्य टीम द्वारा लिखित लाइब्रेरी का उपयोग करेंगे और आपको इसे एक निर्भरता, या कुछ और के रूप में कनेक्ट करने की आवश्यकता है। यद्यपि मेरे स्वयं के आइवी भंडारण का निर्माण इस लेख के दायरे से परे है, मैंने एक बहुत ही बुनियादी (लेकिन काफी काम करने वाला) कॉन्फ़िगरेशन का विवरण शामिल करने का फैसला किया।
परीक्षण के नमूने के रूप में, मैंने
Droid @ स्क्रीन लाइब्रेरी ली, और रिपॉजिटरी
/ var / ivy में स्थित होगी। अब, आपको कलाकृतियों के स्थान की संरचना का चयन करना चाहिए - और इस मामले में यह
/ संगठन / नाम / संस्करण / विरूपण साक्ष्य होगा । हमारे परीक्षण पुस्तकालय के लिए,
com.ribomation का उपयोग पैकेज नामों में एक संगठन के रूप
में किया जाता है, फिर भंडारण संरचना इस तरह दिखाई देगी:
/ var / ivy
└── com
Ation रिबॉम्बेशन
T droidAtScreen
└── 0.5.1
T droidAtScreen.jar
X ivy.xml
Ivy.xml फ़ाइल पर ध्यान
दें - इसमें कलाकृतियों, इसकी निर्भरता, कॉन्फ़िगरेशन और बहुत कुछ का वर्णन है। इसकी न्यूनतम सामग्री इस प्रकार है:
<ivy-module version="2.0"> <info organisation="com.ribomation" module="droidAtScreen" revision="0.5.1" /> <publications> <artifact /> </publications> </ivy-module>
इसके बाद, आपको
ivysettings.xml में हमारे स्थानीय भंडारण को जोड़ने की जरूरत है (पहले से मौजूद टैग, आपका KO)
<ivysettings> <property name="repo.dir" value="/var/ivy"/> <resolvers> <...> <filesystem name="local" m2compatible="true"> <ivy pattern="${repo.dir}/[organization]/[module]/[revision]/[artifact].[ext]" /> <artifact pattern="${repo.dir}/[organization]/[module]/[revision]/[module].jar" /> </filesystem> <chain name="chained" returnFirst="true"> <...> <resolver ref="local" /> </chain> </resolvers> <...> </ivysettings>
A2compatible विशेषता पर ध्यान
दें - इसके उपयोग से इस तथ्य को बढ़ावा मिलेगा कि आइवी क्रमशः संगठन नाम में सिस्टम सेपरेटर के साथ डॉट्स को बदल देगा, और कलाकृतियों की खोज
com.ribomation निर्देशिका में नहीं होगी, लेकिन उनके पदानुक्रम में -
com / ribomation । अब,
ivy.xml पर निर्भरता जोड़ें:
<dependency org="com.ribomation" name="droidAtScreen" rev="0.5.1" />
दरअसल, यह सब - आप
संकल्प कार्य चला सकते हैं।
यदि आप SSH के माध्यम से एक्सेस किए गए दूरस्थ रिपॉजिटरी में रुचि रखते हैं, तो आपको रिसोल्वर के रूप में
ssh का उपयोग करने की आवश्यकता है, न कि
फाइलसिस्टम :
<ssh name="shared" host="example.com" user="${user.name}" keyFile="${user.home}/.ssh/key"> <...> </ssh>
अन्यथा, वे समान हैं।
टिप्पणी
आइवी और एक्लिप्स के साथ काम करते समय, निम्नलिखित त्रुटि देखी गई - यदि आपकी परियोजना को कई (मुख्य, परीक्षण, आदि) में विभाजित किया गया है, तो जब मैं उन्हें खोलता हूं, तो किसी कारण से आइवी प्लगइन परियोजनाओं के बीच निर्भरता को भ्रमित करता है। समाधान बहुत सरल है - बस टूलबार पर "रिज़ॉल्यूशन ऑल डिपेंडेंसीज़" बटन पर क्लिक करें।
एक निष्कर्ष के बजाय
इसलिए, इस लेख का उद्देश्य यह दिखाना था कि आप परियोजना की मौजूदा संरचना (और बुनियादी ढांचे) को बदलने के बिना, कैसे कर सकते हैं, इसके लिए एक निर्भरता संकल्प तंत्र को जोड़ें और परियोजना को बनाए रखने और उन्हें जोड़ने के मैनुअल काम से छुटकारा पाएं। परियोजना का स्रोत कोड
यहाँ है । मुझे आशा है कि आपको जानकारी उपयोगी लगी होगी।