सबसे पहले, आपको आइवी कार्यों को इंगित करने के लिए <taskdef>
को परिभाषित करना होगा।
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
इससे आपको आइवी कार्यों तक पहुंच मिल जाएगी। आप इन कार्यों का उपयोग इस तरह करेंगे:
<cachepath pathid="main.classpath" conf="compile"/>
समस्या यह है कि आपके आइवी कार्य नाम अन्य चींटी कार्यों के साथ संघर्ष कर सकते हैं। उदाहरण के लिए, एक आइवी कार्य <report>
है। इसे हल करने के लिए, आप एक आइवी नेमस्पेस बना सकते हैं। ऐसा करने के लिए, आप एक संदर्भ अपने नाम स्थान में <project>
इकाई में इस तरह से रख:
<project name="my.proj" default="package" basedir="."
xmlns:ivy="antlib:org.apache.ivy.ant"/>
अब, जब आप आइवी कार्यों को परिभाषित, तो आप उस antlib:org.apache.ivy.ant
संदर्भ अपने ivy
नाम स्थान के लिए उपयोग कर सकते हैं। पहले की तरह ही taskdef, लेकिन एक uri
क्षेत्र के साथ:
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
वैसे, वहाँ कि uri
के बारे में कुछ खास नहीं है। मैं इस किया जा सकता है:
<project name="my.proj" default="package" basename="."
xmlns:ivy="pastrami:with.mustard">
[...]
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="pastrami:with.mustard">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
बिंदु अब आप ivy:
के साथ अपने कार्य नाम उपसर्ग कर सकते हैं। इसके बजाय इस की:
<cachepath pathid="main.classpath" conf="compile"/>
अब आप यह कर सकते हैं:
<ivy:cachepath pathid="main.classpath" conf="compile"/>
और वह कैसे आप अपने आइवी चींटी कार्यों में पहुँच प्राप्त है।
अब, आप अपने आइवी चींटी कार्यों के लिए उपयोग किया है, तो आप एक ivysettings.xml
फ़ाइल को परिभाषित करने और वहाँ बात करने के लिए <ivy:settings/>
कार्य उपयोग करने की आवश्यकता:
<ivy:settings file="${ivy.home}/ivysettings.xml"/>
एक डिफ़ॉल्ट ivysettings.xml
कि इंगित करेगा आइवी में एम्बेडेड फ़ाइल नहीं है आप दुनिया भर में मेवेन भंडार प्रणाली के लिए।
<ivy:settings/>
कि बहुत सरल है: आप एक कंपनी विस्तृत Maven भंडार की जरूरत नहीं है, तो आप डिफ़ॉल्ट ivysettings.xml
फ़ाइल का उपयोग कर सकते हैं।
कर लेने के बाद, आप में पढ़ सकते हैं और resolve अपने ivy.xml
फ़ाइल जो आम तौर पर अपने build.xml
फ़ाइल के रूप में एक ही निर्देशिका में अपनी परियोजना की जड़ में बैठता है की जरूरत है।
असल में, आपकी ivy.xml
फ़ाइल में आपके प्रोजेक्ट में आने वाले तृतीय पक्ष जार के संदर्भ शामिल हैं। उदाहरण के लिए:
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.17" conf="compile->default"/>
<dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
</dependencies>
क्या यह कह रहा है कि मैं log4j.jar
संकलन के लिए (और परीक्षण भी संकलन के लिए) (संशोधन 1.2.17) की जरूरत है और मैं अपने परीक्षण कोड के संकलन के लिए junit.jar
(revision.4.10) की जरूरत है ।
compile->default
Maven के default
विन्यास करने के लिए अपने compile
विन्यास (कहते हैं जो मैं सिर्फ जार और किसी भी अन्य जार है कि यह इस बात पर निर्भर हो सकता है चाहता हूँ की मैपिंग है।
के मेरे compile
विन्यास से आती है? मैं इसे परिभाषित ।। मेरी ivy.xml
में दस मानक विन्यास कर रहे हैं यह भी अपने ivy.xml
फ़ाइल में चला जाता है:
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
<conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
<conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
<conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
<conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
<conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
<conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
<conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
<conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
<conf name="optional" visibility="public" description="contains all optional dependencies">
</configurations>
आप किसी भी विन्यास नाम आप चाहते हैं का उपयोग कर सकते हैं, लेकिन डिफ़ॉल्ट Maven विन्यास करने के लिए इन नक्शा एक डी व्यापक रूप से उपयोग किया जाता है।
बार जब आप अपने ivy.xml
फ़ाइल को परिभाषित किया है, तो आप अपने निर्भरता को हल करने <ivy.resolve>
उपयोग कर सकते हैं:
<ivy:resolve/>
तो, हम निम्नलिखित है:
- में
<taskdef>
का उपयोग कैसे करें अपने आपके निर्माण में आइवी चींटी कार्यों को शामिल करने के लिए build.xml
।
- आइवी को कॉन्फ़िगर करने के लिए Ivy Ant task
<ivy:settings>
का उपयोग कैसे करें।
<ivy:resolve/>
का उपयोग अपने ivy.xml
फ़ाइल में पढ़ने और अपनी तीसरी पार्टी जार निर्भरताओं को हल करने के लिए कैसे करें।
अब, आप शायद उन जार फ़ाइलों का उपयोग करना चाहते हैं। ऐसा करने के तीन तरीके हैं:
<ivy:cachepath pathid="main.classpath" conf="compile"/>
<ivy:cachepath/>
काम के लिए एक classpath (इस मामले main.classpath बुलाया में) का निर्माण करेगा कि जार आप अपने ivy.xml
फ़ाइल के compile
विन्यास में है के लिए अंक। यह ज्यादातर समय प्रयोग किया जाता है।
आप एक फ़ाइलसेट की जरूरत है, तो आप इस का उपयोग कर सकते हैं:
<ivy:cachefileset setid="compile.fileset" conf="compile"/>
इस मामले में, यह compile.fileset
के refid के साथ एक फ़ाइलसेट पैदा करेगा।
कभी-कभी आपको जार को अपनी परियोजना में लाना पड़ता है। उदाहरण के लिए, यदि आप युद्ध या कान फ़ाइल बनाते हैं, तो आप अपने जार संलग्न करना चाहते हैं।उस मामले में, आप इस का उपयोग कर सकते हैं:
<property name="lib.dir" value="${target.dir}/lib"/>
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"
conf="runtime"/>
यही कारण है, ${lib.dir}
निर्देशिका में अपने जार लाने ताकि आप उन्हें युद्ध या कान में शामिल कर सकते हैं होगा।
लंबे उत्तर के लिए खेद है, लेकिन कवर करने के लिए बहुत सारे कदम हैं। मैं मैनिंग की पुस्तक Ant in Action की अत्यधिक अनुशंसा करता हूं जिसमें आइवी पर एक पूरा अध्याय है।
यह किसी भी आइवी-संबंधी प्रश्न अब तक का सबसे व्यापक जवाब से है मैंने पूछा है या आ गए हैं पूरे, मेरी इच्छा है कि मैं इसे और अधिक बढ़ा सकता हूं। यहां मेरी मदद करने के लिए समय निकालने के लिए धन्यवाद, यह सही था। एक त्वरित अनुवर्ती प्रश्न (यदि मैं कर सकता हूं): मैं अपनी खुद की होस्टेड रिपोजिटरी रखने की योजना बना रहा हूं, शायद आर्टिफैक्टरी द्वारा प्रबंधित। जब भी मैंने आइवी के साथ काम किया है, मैंने देखा है कि मेरे सहकर्मी अपने 'conf' विशेषताओं को' conf = "* -> *" ''या' conf = compile-> डिफ़ॉल्ट' के रूप में परिभाषित करते हैं, लेकिन किसी को भी स्पष्ट नहीं लगता है इन्हें क्या करना है, और क्यों ... – IAmYourFaja
आप उल्लेख करते हैं कि स्थानीय आइवी कॉन्फ़िगरेशन ('ivy.xml') और रिपोजिटरी के बीच इसका एक मैपिंग इसके खिलाफ है, और आप यह दिखाने के लिए पर्याप्त उदार थे कि 'संकलन' कॉन्फ़िगरेशन जैसा दिख सकता है (बनाम एक 'टेस्ट' कॉन्फ़िगरेशन)। लेकिन भंडार-पक्ष ("तीर" ऑपरेटर के दाईं ओर) के बारे में क्या? "' * -> * '" मानचित्र क्या है? "डिफ़ॉल्ट" के बारे में क्या? सिर्फ उत्सुक है क्योंकि इससे कोई फर्क नहीं पड़ता कि मैं कितनी बार आइवी दस्तावेज़ पढ़ता हूं, मैं अपने सिर को इसके चारों ओर लपेट नहीं सकता। आपके सहयोग के लिए पुन: धन्यवाद! – IAmYourFaja
आईवी में कोई मानक कॉन्फ़िगरेशन नहीं है। आपको अपनी कॉन्फ़िगरेशन को अपनी 'ivy.xml' फ़ाइल में परिभाषित करना होगा। मेरे पोस्ट मैप में मैवेन _scopes_ में वर्णित मानक वाले। मैं अपने 'ivy.xml' में एक एकल कॉन्फ़िगरेशन को परिभाषित कर सकता हूं, या मैं उन जोड़ों को जोड़ सकता हूं जिन्हें मैंने उपरोक्त उल्लेख नहीं किया है। उदाहरण के लिए, कुछ लोगों ने axis2 और WSDL फ़ाइलों जैसी चीज़ों के लिए 'ivy.xml में 'जेनरेट-स्रोत' कॉन्फ़िगरेशन जोड़ा है। बात यह है कि आपको अपनी कॉन्फ़िगरेशन को रिपोज़ 'कॉन्फ़िगरेशन में मैप करना होगा। मैंने कभी कोशिश नहीं की है * * -> * '। मुझे लगता है कि यह आपके सभी ivy.xml' में सभी कॉन्फ़िगरेशन कॉन्फ़िगरेशन में आपकी सभी कॉन्फ़िगरेशन को मैप करता है। मुझे इसे आज़मा देना होगा। –