首页 > 其他分享 >Gradle学习之依赖冲突解决

Gradle学习之依赖冲突解决

时间:2022-10-23 14:32:37浏览次数:46  
标签:依赖 app isForce Gradle 冲突 版本 rxjava 2.2

强制依赖版本

默认情况下依赖冲突Gradle会使用高版本的依赖

但是很多时候不兼容,因此出现了强制依赖版本的几个关键字

1) isFoce

isFoce 标记会强制使用该标记版本的依赖

dependencies {     
	implementation("io.reactivex.rxjava2:rxjava:2.2.6") {        
 		isForce = true    
	 }     
	implementation("io.reactivex.rxjava2:rxjava:2.2.10") 
}
 // 依赖决议使用 2.2.6 版本

作用规则:

  • 同一个 module 中,对同一个依赖多次书写 isForce,只有第一个会生效,后面的都没用
  • isForce 只作用于当前模块, 不同模块中的 isForce 相互独立
  • isForce 跨模块,这些模块相互依赖,那么以 app 的 isForce 为准,因为 app 的 脚本先执行
  • isForce 的版本并不会反映到 POM 文件中, 这个必须清楚,要使用 isForce 一定要谨慎

缺点:

force 的版本不能比 app 主模块的版本低,要不就报错。比如 app 模块依赖于 lib, 如果 app 中引入了 rxjava:2.2.10, lib 却 force 了 rxjava:2.2.6 则会发生编译错误。这种情况下需要在app中进行force,lib中移除force 因为只能force一次app先构建

2) strictly

strictly 是一种强力依赖版本约束,官方现在推荐使用这个,可以用 !! 简写

dependencies {    
 	implementation("io.reactivex.rxjava2:rxjava:2.2.0!!")      
	implementation("io.reactivex.rxjava2:rxjava") {
         version {             
			strictly("2.2.0")        
	 	}     
	}
 } 

这样就会强制使用 2.2.0 版本的依赖了。

但是同样也有问题 ,constraints 的版本不能比其他的低,要不也会报错,下面的代码就是有问题的,会报错

这个感觉并不是问题,依赖声明的是高版本,为什么需要用低版本,直接依赖低版本不久好了吗

dependencies {    
 	implementation("io.reactivex.rxjava2:rxjava:2.2.4") 		
	constraints {
		implementation("io.reactivex.rxjava2:rxjava:2.2.0!!") 	
	}
}

通过hook Gradle生命周期进行修改

//指定使用的版本是26.1.0
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '26.1.0'
            }
        }
    }
}

禁止依赖传递

也就是传递到compilePath中出现的冲突,transitive 让我们自己选择是不是要把依赖传递下去

举例

app implementation libs、libs api rxandroid,这样我们在 app 中也能够使用 rxandroid 的 API,我们给 libs api rxandroid 设置 transitive(false) 后,app 中就找不到 rxandroid 的类库了,因为依赖无法被传递了

api("io.reactivex.rxjava2:rxandroid:2.1.1"){ 	
	transitive(false)
 }

标签:依赖,app,isForce,Gradle,冲突,版本,rxjava,2.2
From: https://blog.51cto.com/u_14689064/5787334

相关文章