2010-12-22 12 views
17

मैं mvn निर्भरता भाग गयाएक निर्भरता संघर्ष होने पर एक मेवेन निर्माण कैसे तोड़ें? एक परियोजना के लिए पेड़ और मैं निम्नलिखित की तरह उत्पादन देखा:

[INFO] my:project:jar:1.0.0-SNAPSHOT 
[INFO] +- some.other:library:jar:2.0.0:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.1:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.0:compile 
[INFO] | \- (org.slf4j:slf4j-api:jar:1.6.0:compile - omitted for conflict with 1.6.1) 

यह एक खराब स्थिति में होने की वजह से अपने प्रोजेक्ट slf4j 1.6.0 पर सीधे निर्भर करता है और कुछ पुस्तकालय है कि हम निर्भर transitively पर slf4j 1.6.1 पर निर्भर करता है। ये दो संस्करण बाइनरी संगत होने लगते हैं ताकि बिल्ड बिना किसी चेतावनी के गुजरता है। क्या मैवेन को इसके निर्भरता रिज़ॉल्यूशन के बारे में अधिक सख्त होने का कोई तरीका है ताकि मैं इस परिदृश्य में विफल होने वाले नए निर्माण को कॉन्फ़िगर कर सकूं? इस मामले में, समाधान सिर्फ हमारी निर्भरता को slf4j के नए संस्करण में अपडेट करना होगा।

उत्तर

22

मेवेन-एनफोर्स-प्लगइन में dependencyConvergence कॉन्फ़िगरेशन है जो मैं चाहता हूं। संयोग से, दस्तावेज से उदाहरण slf4j का उपयोग करता है।

इस तरह विन्यस्त यह:

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

निर्भरता के इस संयोजन निर्माण विफल हो जाएगा:

[ERROR] 
Dependency convergence error for org.slf4j:slf4j-api:1.6.1 paths to dependency are: 
+-org.myorg:my-project:1.0.0-SNAPSHOT 
    +-org.slf4j:slf4j-jdk14:1.6.1 
    +-org.slf4j:slf4j-api:1.6.1 
and 
+-org.myorg:my-project:1.0.0-SNAPSHOT 
    +-org.slf4j:slf4j-nop:1.6.0 
    +-org.slf4j:slf4j-api:1.6.0 
:

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-jdk14</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-nop</artifactId> 
     <version>1.6.0</version> 
    </dependency> 
    </dependencies> 
इस के साथ

संकलन के दौरान लॉग किया जा रहा