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