解决Gradle中jar冲突

如果有两个依赖引用了相同jar包的不同版本时,默认情况下gradle会采用最新版本的jar包,此时可以通过排除选项来排除。

首先,看一下依赖一个库时的格式,name也就是module

 compile group:'com.android.support',name:'appcompat-v7',version:'26.1.0'
1.直接在configuration中排除

    configurations{
        //编译期排除appcompat-v7
        compile.exclude module: 'appcompat-v7'
        //在整个构建过程中排除com.android.support:appcompat-v7
        all*.exclude group: 'com.android.support', module: 'appcompat-v7'
    }
2.在具体的某个dependency中排除,比如我们引入的jar包com.common:lib:1.0中需要排除其中的appcompat-v7

dependencies{

    compile 'com.common:lib:1.0'{
        exclude module: 'appcompat-v7'
        //或者
        exclude group: 'com.common',module: 'appcompat-v7'
    }
}
排除多个jar可以使用多个exclude

3.当然,我们也可以强制使用某个统一的版本。出现冲突时优先使用该版本进行解决

compile('com.common:lib:1.0') {
     force = true
}
4.强制使用某个统一版本的依赖,我们也可以全局配置

configurations.all {
   resolutionStrategy {
       force 'com.common:lib:1.0'
   }
}
5.讲到这里,不得不说一下transitive,它是管理以来的传递性的,比如com.common:lib:1.0中使用了okhttp,如果可以传递,则使用时他会自动为我们加入okhttp,如果不可以传递,则需要额外配置okhttp

关闭依赖传递

compile('com.common:lib:1.0') {
    transitive = false
}
也可以采用添加@jar的方式忽略该依赖的所有传递性依赖

compile `com.common:lib:1.0@jar`
当然也可以全局配置关闭依赖传递

configurations.all {
   transitive = false
}
6.再讲一下动态依赖吧,我们有时候会让以来的jar始终是最新版本,并且不用每次手动更改版本,我们可以使用+;gradle在每次执行构建时检查远程仓库是否存在该依赖的新版本,如果存在新版本则下载选用最新版本。
compile 'com.common:lib:+'
当然也可以指定依赖某个大版本下的最新子版本,1.+表示始终采用该依赖最新的1.x版本的最新依赖。
compile 'com.common:lib:1.+'
最后啰嗦一下,出现冲突时查看某个冲突jar的依赖关系,可以使用 dependencyInsight,具体用法可以去查找学习一下,举个用例,查看 app项目中v7的compile 出现在何处

gradlew -q app:dependencyInsight --dependency appcompat-v7 --configuration compile
结束!


转载自:https://blog.csdn.net/cdye_1234/article/details/80103128 
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值