我是靠谱客的博主 耍酷咖啡豆,这篇文章主要介绍八.解决依赖冲突,现在分享给大家,希望可以做个参考。

一.解决冲突
1.查看依赖报告
2.解决传递性依赖
3.强制一个版本

二.修改gradle默认解决策略
1.gradle默认会使用高版本的依赖
2.取消默认策略,如果有版本冲突,直接让其构建失败

复制代码
1
2
3
4
5
configurations.all{ resolutionStrategy{ failOnVersionConflict() } }

3.排除传递性依赖(默认排除最低版本)

复制代码
1
2
3
4
5
6
//排除哪个jar的依赖 compile('org.spring-core:3.6.3.Final'){ //指定要排除的依赖的group和module=name,不指定版本,默认排除最低版本 exclude group:'org.slf4j',module:'slf4j-api' //transitive=false//排除所有传递性依赖,比较少用 }

4.修改gradle的默认使用最高版本策略(强制指定默认使用某个版本)

复制代码
1
2
3
4
5
configurations.all{ resolutionStrategy{ force 'org.slf4j:slf4j-api:1.7.24' } }

三.例
1.在项目的bulid.gradle文件中添加依赖:

复制代码
1
2
3
4
5
6
7
8
dependencies { //junit的依赖 testCompile group: 'junit', name: 'junit', version: '4.11' //bibernate的依赖 compile 'org.hibernate:hibernate-core:3.6.3.Final' //logback的依赖 compile 'ch.qos.logback:logback-classic:1.2.1' }

2.在gradle的选项卡的:web-Source Sets-main-Dependencies的依赖中可以看到:

复制代码
1
2
org.hibernate:hibernate-core:3.6.3.Final 依赖了 org.slf4j:slf4j-api:1.7.22 ch.qos.logback:logback-classic:1.2.1 也依赖了 org.slf4j:slf4j-api:1.7.22

其实两个jar依赖的版本并不一定完全一样,但是gradle默认取最高版本的依赖,进行了最高版本的依赖统一
可以执行Tasks-help-dependences查看以来详情

3.取消gradle的默认高版本统一依赖,在bulid.gradle中添加:

复制代码
1
2
3
4
5
6
//取消gradle默认统一使用高版本依赖的策略(gradle默认依赖冲突解决策略) configurations.all{ resolutionStrategy{ failOnVersionConflict() } }

执行build,会看到报错信息:

复制代码
1
2
3
4
5
6
7
8
9
FAILURE: Build failed with an exception. * What went wrong: Could not resolve all dependencies for configuration ':runtime'. > A conflict was found between the following modules: - org.slf4j:slf4j-api:1.6.1 - org.slf4j:slf4j-api:1.7.22 - org.slf4j:slf4j-api:1.5.8

4.排除传递性依赖,在build.gradle中添加:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
//排除传递性依赖 //添加依赖 dependencies { //junit的依赖 testCompile group: 'junit', name: 'junit', version: '4.11' //hbernate的依赖 compile ('org.hibernate:hibernate-core:3.6.3.Final'){ //排斥hibernate对slf4j的依赖 exclude group:'org.slf4j',module:'slf4j-api' } //logback的依赖 compile ('ch.qos.logback:logback-classic:1.2.1') }

执行bulid,编译成功

5.强制gradle默认统一使用某个版本依赖的策略(修改gradle默认依赖冲突解决策略)(可以是maven仓库的任何版本)

复制代码
1
2
3
4
5
6
7
//强制gradle默认统一使用某个版本依赖的策略(修改gradle默认依赖冲突解决策略) configurations.all{ resolutionStrategy{ failOnVersionConflict() force 'org.slf4j:slf4j-api:1.7.22' } }

强制不使用最新版,使用指定版

最后

以上就是耍酷咖啡豆最近收集整理的关于八.解决依赖冲突的全部内容,更多相关内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部