2010-12-22 35 views
17

Tôi chạy phụ thuộc mvn: cây cho một dự án và tôi thấy đầu ra như sau:Làm thế nào để phá vỡ một maven xây dựng khi có một cuộc xung đột phụ thuộc?

[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) 

Đây là một tình trạng xấu để được vì dự án của tôi phụ thuộc trực tiếp vào slf4j 1.6.0 và một số thư viện mà chúng tôi phụ thuộc quá phụ thuộc vào slf4j 1.6.1. Hai phiên bản này có thể tương thích với nhị phân, vì vậy quá trình xây dựng sẽ không có bất kỳ cảnh báo nào. Có cách nào để Maven trở nên nghiêm ngặt hơn về độ phân giải phụ thuộc của nó để tôi có thể định cấu hình một bản dựng mới có thể bị lỗi trong trường hợp này không? Trong trường hợp này, giải pháp sẽ là chỉ cập nhật sự phụ thuộc của chúng ta vào phiên bản mới hơn của slf4j.

Trả lời

22

Trình bổ sung maven-enforcer có cấu hình dependencyConvergence thực hiện những gì tôi muốn. Thật trùng hợp, ví dụ từ tài liệu sử dụng slf4j.

Cấu hình nó như thế này:

<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> 

Sự kết hợp này phụ thuộc sẽ gây ra một build thất bại:

<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> 

Với điều này được ghi trong suốt biên soạn:

[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 
Các vấn đề liên quan