maven依赖调解

项目有以下依赖:

<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 分析依赖后,发现maven实际使用的是 poi下的commons-codec(1.5)

image

再来看以下情形:

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

分析依赖后发现,maven选择了commons-codec(1.9)

image

结论:

maven遇到依赖冲突后,主要两种原则解决:

1.路径优先原则:如第一个例子,

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选择较短路径的那个

2.声明优先原则:如第二个例子,当冲突依赖所处的路径相同,声明在前的会被引用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容