項(xiàng)目有以下依賴(lài):
<dependency>
<groupId>com.vips.components</groupId>
<artifactId>vips-common-cache</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
其中
vips-common-cache ---> vip-common-util ---> commons-codec(1.6)
poi ---> commons-codec(1.5)
使用 mvn dependency:tree 分析依賴(lài)后,發(fā)現(xiàn)maven實(shí)際使用的是 poi下的commons-codec(1.5)
image
再來(lái)看以下情形:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
httpclient ---> commons-codec(1.9)
poi ---> commons-codec(1.5)
分析依賴(lài)后發(fā)現(xiàn),maven選擇了commons-codec(1.9)
image
結(jié)論:
maven遇到依賴(lài)沖突后,主要兩種原則解決:
1.路徑優(yōu)先原則:如第一個(gè)例子,
vips-common-cache ---> vip-common-util ---> commons-codec(1.6)
poi ---> commons-codec(1.5)
commons-codec(1.6)路徑深度是3, commons-codec(1.5)是2,所以maven選擇較短路徑的那個(gè)
2.聲明優(yōu)先原則:如第二個(gè)例子,當(dāng)沖突依賴(lài)所處的路徑相同,聲明在前的會(huì)被引用