maven導入jar包衝突的三種解決方法

maven導入jar包衝突的三種解決方法

直接依賴:A項目中導入了B包,我們可以說A項目直接依賴於B
傳遞依賴:A項目中導入了B包,B包直接依賴於C包,最終A項目也可以使用C包,那麼我們可以說A項目傳遞依賴於C

解決jar包衝突的三個原則

一:第一聲明原則

二:路徑優先原則

三:直接排除法

一:第一聲明原則(哪個jar包的座標在靠上的位置,哪個就是第一聲明,最終進入項目的就是哪個包的依賴包)

我們添加依賴

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.8.RELEASE</version>
        </dependency>
    </dependencies>

這時我們發現spring-core的版本爲4.2.5,雖然spring-context下面的spring-aop下也有spring-core,但是因爲我們配置的spring-beans在上面,所以會有限選擇spring-beans下面的spring-core的版本
在這裏插入圖片描述

二:路徑優先原則(直接依賴比傳遞依賴路徑近,哪個路徑近,進入到項目的就是哪個的依賴包)

現在我們直接導入spring-core包的座標,版本爲4.3.6

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.6.RELEASE</version>
        </dependency>
    </dependencies>

這時我們發現spring-core的版本變成了4.3.6
在這裏插入圖片描述

三:直接排除法(用exclusion標籤直接排除某個包下的依賴包)

現在我們將spring-core核心包的座標刪除,只保留spring-beans與spring-context,根據第一聲明原則,spring-core顯示的版本應該爲4.2.5
但是我們在spring-beans中添加手動排除

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.5.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.8.RELEASE</version>
        </dependency>

    </dependencies>

這時我們發現spring-core版本變成了4.2.8
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章