2012-07-10 13 views
5

मैं निम्नलिखित आइवी लता फ़ाइल है:आइवी, मास्टर कॉन्फ़िगरेशन क्या है और यह jvyaml क्यों नहीं खींच रहा है?

<configurations defaultconfmapping="buildtime"> 
    <conf name="buildtime" visibility="private" description="Libraries needed only for compilation" /> 
    <conf name="runtime" description="Libraries only needed at runtime" /> 
    <conf name="test" description="Libraries only needed for testing" /> 
</configurations> 

<dependencies> 
    <dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime" /> 
    <dependency org="org.apache.solr" name="solr-core" rev="3.6.0" conf="runtime" /> 

</dependencies> 

और मैं एक चींटी को पुनः प्राप्त काम है कि इस तरह दिखता है:

<target name="retrieve-all" depends="resolve"> 
    <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]" conf="*" /> 
</target> 

अजीब बात है, कि सभी सोलर निर्भरता lib/runtime में डाउनलोड करें जैसा कि मैं अपेक्षा करता हूं, लेकिन jvyaml मॉड्यूल नहीं करता है! यह हल करता ', लेकिन जब तक मैं करने के लिए निर्भरता घोषणा बदल lib/क्रम निर्देशिका में डाउनलोड नहीं होगा:

<dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->master" /> 

इस मास्टर विन्यास क्या है और क्यों यह jvyaml जार खींचने के लिए नहीं, बल्कि जरूरत है Solr?

धन्यवाद

उत्तर

19

मैं इस प्रकार आपके विन्यास के पुनर्गठन का सुझाव देते हैं:

<ivy-module version="2.0"> 
    <info organisation="com.myspotontheweb" module="demo"/> 

    <configurations> 
     <conf name="compile" description="Libraries needed only for compilation" /> 
     <conf name="runtime" description="Libraries only needed at runtime" extends="compile" /> 
     <conf name="test" description="Libraries only needed for testing" extends="runtime" /> 
    </configurations> 

    <dependencies> 
     <dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->default" /> 
     <dependency org="org.apache.solr" name="solr-core" rev="3.6.0" conf="runtime->default" /> 
    </dependencies> 

</ivy-module> 

महत्वपूर्ण परिवर्तन की शुरुआत की:

  1. अधिक मानक "संकलन" कॉन्फ़िगरेशन
  2. कॉन्फ़िगरेशन विरासत "विस्तार" विशेषता का उपयोग करके उपयोग करें। संकलन निर्भरताओं को स्वचालित रूप से रनटाइम और परीक्षण कॉन्फ़िगरेशन दोनों में शामिल किया जा सकता है।
  3. कॉन्फ़िगरेशन मैपिंग का उपयोग करें, उदाहरण के लिए: conf = "रनटाइम-> डिफ़ॉल्ट"। इससे यह स्पष्ट हो जाता है कि स्थानीय कॉन्फ़िगरेशन किस रिमोट कॉन्फ़िगरेशन से जुड़ा हुआ है।

विन्यास मैपिंग समझाया

विन्यास एक शक्तिशाली आइवी लता विशेषता है। आइवी लता डाउनलोड Maven यह एक आंतरिक अनुवाद करता है मॉड्यूल और असाइन करता है विन्यास की एक मानक सेट, इस जवाब में सूचीबद्ध:

जब एक निर्भरता की घोषणा यह एक अच्छा विचार हमेशा एक का उपयोग करने के लिए है कॉन्फ़िगरेशन मैपिंग, ताकि इसमें कोई संदेह न हो कि निर्भरता कलाकृतियों को असाइन किया गया है।

उदाहरण के लिए:

<dependency org="??" name="??" rev="??" conf="runtime->default" /> 

यहाँ हम कह रहे हैं हम दूरदराज के मॉड्यूल के डिफ़ॉल्ट हमारे स्थानीय क्रम विन्यास के साथ जुड़े निर्भरता चाहते हैं।

  • डिफ़ॉल्ट: दूरस्थ मॉड्यूल के विरूपण साक्ष्य और सभी यह है क्रम सकर्मक निर्भरता
  • मास्टर: दूरस्थ मॉड्यूल के

    व्यवहार में, केवल दो दूरस्थ विन्यास मैपिंग आप वास्तव में आवश्यकता होगी देखते हैं केवल आर्टिफैक्ट (कोई संक्रमणीय निर्भरता)

निष्कर्ष में, मुझे लगता है कि आपकी समस्या इस तथ्य के कारण हुई थी कि रिमोट ई Maven मॉड्यूल के "क्रम" गुंजाइश Maven मॉड्यूल के विरूपण साक्ष्य शामिल नहीं है, बजाय आप कुछ अतिरिक्त सलाह

मैं भी एक आइवी लता पैदा सुझाव देंगे :-(

मॉड्यूल jvyaml की गैर existant सकर्मक निर्भरता मिल रहे थे निर्भरता प्रबंधन रिपोर्ट, के रूप में इस प्रकार है:

<target name="init" description="Resolve dependencies and populate lib dir"> 
    <ivy:resolve/> 
    <ivy:report todir="${build.dir}/ivy-report" graph="false"/> 
    <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]"/> 
</target> 

रिपोर्ट में मदद मिलेगी बताएं कि किस तरह प्रत्येक निर्भरता अलग विन्यास पर समाप्त होता है। यह भी निर्धारित करने के लिए वास्तव में उपयोगी है कि कैसे ट्रांजिटिव निर्भरताएं प्रबंधित की जा रही हैं।

और अंत में, यहाँ जहां विन्यास विरासत का भुगतान करती है, बनाने आइवी लता चींटी classpaths कामयाब रहे:

<target name="init" description="Resolve dependencies and set classpaths"> 
    <ivy:resolve/> 
    <ivy:report todir="${build.dir}/ivy-report" graph="false"/> 

    <ivy:cachepath pathid="compile.path" conf="compile"/> 
    <ivy:cachepath pathid="runtime.path" conf="runtime"/> 
    <ivy:cachepath pathid="test.path" conf="test"/> 
</target> 

+0

धन्यवाद इतना। आपने इसे वास्तव में अच्छी तरह से समझाया। मैंने दस्तावेज का एक गुच्छा भी पढ़ा है: http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html लेकिन केवल अधिक उलझन में आया। – rainkinz

+1

कृपया इसके साथ अपाचे दस्तावेज़ को स्वैप करें। धन्यवाद @ मार्क –

+0

धन्यवाद मार्क, आपने अभी यह मुझे बहुत स्पष्ट कर दिया है। +100 –

2

सूचना है कि मूल Solr कोर या तो प्राप्त नहीं होता। अपने संकल्प के बाद, कैश पर जाएं और दोनों मॉड्यूल के लिए ivy.xml फ़ाइलों को जांचें।

कि वे conf = मास्टर में उनकी कलाकृतियों को प्रकाशित आप देखेंगे केवल

<artifact name="jvyaml" type="jar" ext="jar" conf="master"/> 

<artifact name="solr-core" type="jar" ext="jar" conf="master"/> 

जिसका मतलब है, आप को निरूपित करने के कि आपके builtime विन्यास अपनी निर्भरता के 'गुरु' विन्यास आह्वान चाहिए स्पष्ट विन्यास मानचित्रण क्या करना है । (कॉन्फ़िगरेशन मैपिंग जांचें)।

<dependency org="org.apache.solr" name="solr-solrj" rev="3.6.0" force="true" conf="compile->compile(*),master(*);runtime->runtime(*)"/> 

मुझे लगता है कि यह मास्टर (*) thingy है:

हालांकि, Solr कोर की निर्भरता, के रूप में आप ivy.xml फ़ाइल में देख सकते हैं विन्यास मानचित्रण है।

<dependency org="net.java.dev" name="jvyaml" rev="0.2.1" conf="runtime->master" /> 

यह एक का कहना है कि क्रम नामित निर्भरता में मास्टर विन्यास आह्वान किया: जब मैं निर्भरता की घोषणा मैं मानचित्रण

क्या मैं आमतौर पर करते हैं मेरे अपने ivy.xml फ़ाइल में है।

आप कर सकता है

conf="runtime,test->master" 
रूप में अच्छी तरह

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