gradle入门(1-4)gradle的依赖排除和强制引入
Posted 非淡泊无以明志,非宁静无以致远 - 长安快马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle入门(1-4)gradle的依赖排除和强制引入相关的知识,希望对你有一定的参考价值。
1、transitive = true
transitive dependencies 被称为依赖的依赖,称为“间接依赖”比较合适。
compile(‘com.meituan.android.terminus:library:[email protected]‘){
transitive = true
exclude module: ‘hotel_model‘
exclude module: ‘base_model‘
}
@aar只下载该aar包,而不下载该aar包所依赖的其他库,
那如果想在使用@aar的前提下还能下载其依赖库,则需要添加transitive=true的条件。
2、排除 transitive dependencies
通过configuration或者dependency可以除去 transitive dependencies:
build.gradle
configurations {
compile.exclude module: ‘commons‘
all*.exclude group: ‘org.gradle.test.excludes‘, module: ‘reports‘
}
dependencies {
compile("org.gradle.test.excludes:api:1.0") {
exclude module: ‘shared‘
}
}
如果在configuration中定义一个exclude,那么所有依赖的transitive dependency (指定的)都会被去除。
定义exclude时候,或只指定group, 或只指定module名字,或二者都指定。
不是所有的transitive dependency 都可以被去除的,如runtime时用到的。
一般来说,runtime时候用不到的,或者目标环境及平台已经包含该依赖的可以执行exclude去除。
那exclude选per-dependency还是per-configuration?
大多数情况都选用per-configuration,下面是一些使用exclude的典型场合:
* 有licensing问题
* 从远程仓库上无法获取到依赖
* runtime时候用不到
* 有版本冲突
3、exclude的疑问
exclude module: ‘base_model‘ 和 exclude group:‘com.name.group‘ module:‘base_model‘ 的区别?
二者作用是完全一样的。
在上面图示中会有这么几种标记:
版本 : 唯一的依赖。
版本():还存在该库其他版本的依赖或者间接依赖,并且默认选择()所标注的版本。
版本1->版本2(*):还存在该库其他版本的依赖或者间接依赖,并且选择 版本2。
force=true
compile(‘com.squareup.okhttp:okhttp-mt:2.5.0‘) {
force = true
}
如我们在依赖okhttp的时候很可能发生冲突,就比如依赖的依赖中也包含了okhttp,这种场合下,就会产生版本冲突的问题,
加上force = true表明的意思就是即使在有依赖库版本冲突的情况下坚持使用被标注的这个依赖库版本。
以上是关于gradle入门(1-4)gradle的依赖排除和强制引入的主要内容,如果未能解决你的问题,请参考以下文章
从 Gradle 中的 Spring Boot 中排除 Tomcat 依赖项
Android Gradle 插件Gradle 依赖管理 ⑦ ( dependencies 传递依赖设置 | transitive 关闭依赖传递配置 | exclude 排除子依赖配置 )