Maven中解決依賴衝突的問題

lonecloud發表於2016-07-21

1.短路優先:誰離得最近就使用誰的依賴jar包

C到達A為C->B->A

C到達B為C->B

例如:

A中的 commons-io的版本為2.4

B中的commons-io的版本為2.0

C中依賴於B,B依賴於A

則C的junit的包為2.0版本

因為依賴的短路優先

2.如果兩條路都是一樣長的時候呢?

C到達A為C->A

C到達B為C->B

則看pom檔案中依賴的兩個工程誰在前面就是用哪個版本

例如:

這裡使用的common-io為2.4版本

        <dependency>
            <groupId>org.lonecloud.A</groupId>
            <artifactId>A</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--C依賴於B但是會將A的依賴傳遞進來 -->
        <dependency>
            <groupId>org.lonecloud.B</groupId>
            <artifactId>B</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 此標籤的作用是可以將B的傳遞依賴關係A不傳遞給C -->
            <!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> 
                </exclusion> </exclusions> -->
        </dependency>

C檔案中新增了A和B的依賴項的時候誰最先載入則使用誰的jar包

下面使用的是2.0的版本,也就是B中的jar包

        <dependency>
            <groupId>org.lonecloud.B</groupId>
            <artifactId>B</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 此標籤的作用是可以將B的傳遞依賴關係A不傳遞給C -->
            <!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId> 
                </exclusion> </exclusions> -->
        </dependency>
        <dependency>
            <groupId>org.lonecloud.A</groupId>
            <artifactId>A</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

 

相關文章