一种优雅的去除依赖冲突

以前在遇到版本升级的时候经常会遇到版本依赖冲突,比如在升级rxjava 从2.x升级到3.x版本,由于RxAndroid因为没有及时升级,因此内部还是依赖2.x版本的RxJava,这就导致项目的依赖发生了冲突。

通常情况下我们会这么写

1
2
3
implementation ('io.reactivex.rxjava2:rxandroid:2.1.0')  {
exclude group: 'io.reactivex.rxjava2', module: 'rxjava'
}

但是这样写并不优雅,假设我们有多个依赖冲突,代码就会变为下面的样子

1
2
3
4
5
6
7
8
9
implementation "libraryA:xxx:1.0.0",{
exclude group: 'com.android.support', module: 'recyclerview-v7'
}
implementation "libraryB:xxx:2.2.0",{
exclude group: 'com.android.support', module: 'recyclerview-v7'
}
implementation "libraryC:xxx:0.0.8",{
exclude group: 'com.android.support', module: 'recyclerview-v7'
}

针对这种情况,我们可以在gradle的构建过程中强制指定依赖的版本,以rxjava为例,可以这么处理

image-20191118104107736

额外知识点

1,本地依赖替换为外部依赖

通过dependencySubstitution便可以非常方便对这两种场景进行切换

image-20191118104355568

useRemote只是定义在build.gradle文件中的一个变量,作为切换开发-测试环境的开关:

2.将外部依赖替换为本地依赖

1
2
3
4
5
6
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module("org.utils:api") because "we work with the unreleased development version" with project(":api")
substitute module("org.utils:util:2.5") with project(":util")
}
}
坚持原创技术分享,您的支持将鼓励我继续创作!
nbwzlyd 微信支付

微信支付

nbwzlyd 支付宝

支付宝