2013-01-14 60 views
8

में प्रबंधित निर्भरता संस्करणों को ट्रैक करना कहें कि मेरे पास बहुत सारी निर्भरताओं के साथ एक जटिल परियोजना है। निर्भरताओं के संस्करणों को बहुत से आयात स्कोप पोम्स द्वारा प्रबंधित किया जाता है। मेरी परियोजना पर आर्टिफैक्ट group:artifact पर निर्भरता है, जिसकी आर्टिफैक्ट group:transitive-dependency पर निर्भरता है।मैवेन

+- group:artifact:jar:1.3 
    +- group:transitive-dependency:jar:1.1 (version managed from 1.3) 

समस्या group:artifact:1.3 है की आवश्यकता है group:transitive-dependency संस्करण 1.3 या उच्चतर: जब मैं dependency:tree चलाने मैं कुछ इस तरह देखते हैं। निश्चित रूप से आयात पोम्स में से एक गलत संस्करण को मजबूर कर रहा है। लेकिन क्या यह जानने का कोई तरीका है कि उनमें से सभी के माध्यम से कौन सा है?

+0

आपके द्वारा चलाए जा की कोशिश की अपने माता पिता proejct पर 'mvn site' और' निर्भरता convergence' उत्पादन को देखकर है? – Tim

+0

निर्भरता अभिसरण निर्भरता अभिसरण रिपोर्ट में प्रकट नहीं होता है। न ही यह दिखाता है कि निर्भरताएं कहाँ प्रबंधित की जाती हैं। –

उत्तर

5

आपको मेवेन-एनफोर्स-प्लगइन का प्रयास करना चाहिए और इसे निर्भरता कॉन्फ़िगरेंस करने के लिए कॉन्फ़िगर करना चाहिए, उदा।

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     <configuration> 
      <rules> 
      <DependencyConvergence/> 
      </rules> 
     </configuration> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

यह आपको दिखाएगा कि कौन सी शीर्ष स्तर निर्भरताओं के निर्भरता पेड़ों में अन्य निर्भरताओं के विभिन्न संस्करण हैं। फिर आप उन निर्भरता प्रकारों को दबाते हैं जिन्हें आप बहिष्करण का उपयोग नहीं करना चाहते हैं।

2

ऐसा तब होता है जब 2 या अधिक माता-पिता पोम्स एक ही कलाकृति के साथ संघर्ष करते हैं।

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

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2) [INFO] | +- oro:oro:jar:2.0.8:compile

मेरे मामले में, ढांचा कोर log4jextentsions 2.2 उल्लेख किया है। और मेरा सुपर पोम log4jextentsions 2.3 कहता है। किसी भी तरह फ्रेमवर्क-कोर ने log4jextentsions 2.2 का उपयोग करने के लिए मैवेन को आश्वस्त किया।

बाद में जब मैं ढांचे कोर पोम 2.3 उपयोग करने के लिए अद्यतन,

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile [INFO] | +- oro:oro:jar:2.0.8:compile