2015-06-18 15 views
11

यदि मॉड्यूल के दो निर्भरता दोनों में एक आम अव्यवस्था है लेकिन उनके पोम्स में निर्दिष्ट विभिन्न संस्करण हैं, तो मॉड्यूल का निर्माण करते समय कौन सा संस्करण उपयोग किया जाता है?निर्भरता के संस्करणों को हल करने वाले मेवेन

उदाहरण

 Artifact-A 
     /  \ 
    /  \ 
    /   \ 
Artifact-B  Artifact-C 
     \   /
1.6.0 \  /1.8.0 
     \  /
     Artifact-D 
परिदृश्य में

इसी के लिए नीचे दिए गए साक्ष्य-सी का कौन सा संस्करण विरूपण साक्ष्य-ए का प्रयोग करेंगे विस्तृत?

Artifact-A 
     |  \ 
     |  | 
     |  | 
    Artifact-B | 1.60.0 
     |  | 
1.62.0 |  | 
     | /
    Artifact-C 

यदि आप इन संस्करणों को कैसे हल करते हैं, तो संक्षिप्त व्याख्या प्रदान करने या लिंक करने के लिए लिंक कर सकते हैं।

+0

यह भी देखें: http://stackoverflow.com/questions/6283891/how-does-maven-resolve-version-conflicts-of-transitive- निर्भरता-nearest-wi –

उत्तर

7

Introduction to the Dependency Mechanism देखें:

सकर्मक निर्भरता के साथ, शामिल पुस्तकालयों का ग्राफ जल्दी से काफी बड़ी बढ़ सकता है। - इस निर्धारित करता है निर्भरता का कौन सा संस्करण जब एक विरूपण साक्ष्य के कई संस्करण सामना होता है उपयोग किया जाएगा

  • निर्भरता मध्यस्थता: इस कारण से, वहाँ कुछ अतिरिक्त सुविधाओं है कि सीमित कर देगा जो निर्भरता शामिल किए गए हैं। वर्तमान में, मेवेन 2.0 केवल "निकटतम परिभाषा" का उपयोग करने का समर्थन करता है जिसका अर्थ है कि यह निर्भरता के पेड़ में आपकी परियोजना के निकटतम निर्भरता के संस्करण का उपयोग करेगा। आप हमेशा अपने प्रोजेक्ट के पीओएम में इसे स्पष्ट रूप से घोषित करके एक संस्करण की गारंटी दे सकते हैं। ध्यान दें कि यदि निर्भरता पेड़ में दो निर्भरता संस्करण समान गहराई पर हैं, तो मैवेन 2.0.8 तक यह परिभाषित नहीं किया गया था कि कौन सी जीत जाएगा, लेकिन चूंकि मेवेन 2.0.9 यह घोषणा की गई क्रम में ऑर्डर है: पहली घोषणा जीत
    • "निकटतम परिभाषा" का अर्थ है कि उपयोग किया गया संस्करण निर्भरता के पेड़ में आपके प्रोजेक्ट के सबसे नज़दीक होगा, उदाहरण के लिए। यदि ए, बी, और सी के लिए निर्भरता को ए -> बी -> सी -> डी 2.0 और ए -> ई -> डी 1.0 के रूप में परिभाषित किया गया है, तो डी 1.0 का निर्माण ए के निर्माण के दौरान किया जाएगा क्योंकि ए से डी के माध्यम से पथ ई छोटा है। आप स्पष्ट रूप से डी 2.0 के उपयोग

इसका मतलब यह है मजबूर करने के लिए एक में विकास 2.0 में एक निर्भरता जोड़ सकता है कि अपने पहले उदाहरण (और Maven 2.0.9 शुरू) यदि विरूपण साक्ष्य बी के लिए आर्टिफैक्ट सी से पहले एक निर्भरता के रूप में घोषित किया गया है:

<dependency> 
    <groupId>groupB</groupId> 
    <artifactId>projectB</artifactId> 
</dependency> 
<dependency> 
    <groupId>groupC</groupId> 
    <artifactId>projectC</artifactId> 
</dependency> 

तब प्रोजेक्ट बी में घोषित निर्भरता डी चुना जाता है।

+0

मुझे समझ में नहीं आता कि इसका क्या अर्थ है घोषणा में आदेश, क्या आप समझा सकते हैं कि इस के अनुसार पहले उदाहरण में निर्भरता कैसे चुनी जाएगी? –

+1

@ChamilaWijayarathna उत्तर के अंतिम भाग को अपडेट किया गया। – manouti

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