依赖的更新与缓存
更新依赖
在执行build、compile等任务时会解析项目配置的依赖并按照配置的仓库去搜寻下载这些依赖。默认情况下,Gradle会依照 Gradle缓存->你配置的仓库的顺序 依次搜寻这些依赖,并且一旦找到就会停止搜索。
Gradle默认对依赖的缓存是24小时,也就是说24小时内如果通过Sync Project with Gradle Files
拉到的依然还是旧的库。但对于项目而言,最好的办法就是每次拉都是最新的包,这样才能确保不同开发成员间能同步到最新的项目依赖。
如果想要忽略本地缓存每次都进行远程检索可以通过在执行命令时添加--refresh-dependencies
参数来强制刷新依赖。
gradle build --refresh-dependencies
此外,Gradle提供了cacheChangingModulesFor(int, java.util.concurrent.TimeUnit)
,
cacheDynamicVersionsFor(int, java.util.concurrent.TimeUnit)
两个方法来设置缓存的时效。
Gradle将maven依赖分为:
dynamic version (e.g. xxxx:xxx:1.+) 动态版本
concrete version (e.g. xxxx:xxx:1.2) 固定版本
configurations.all {
// 每隔24小时检查远程依赖是否存在更新,针对xxx:xxx:1.1之类的静态版本
resolutionStrategy.cacheChangingModulesFor 24, 'hours'
// 每隔10分钟..
//resolutionStrategy.cacheChangingModulesFor 10, 'minutes'
// 采用动态版本声明的依赖缓存10分钟,针对xxx:xxx:1.1.+之类的动态版本
resolutionStrategy.cacheDynamicVersionsFor 10*60, 'seconds'
}
所以我们如果想要实时拉到最新的库,只要在根build.gradle下,添加如下代码即可。
//不使用缓存,使用仓库中最新的包
configurations.all {
resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds' // 动态版本 x.x.+
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'// 变化版本 x.x.x
}
此效果等同于
gradle build --refresh-dependencies
缓存管理
Gradle在按照配置的仓库去搜寻下载依赖时,下载的依赖默认会缓存到USER_HOME/.gradle/caches
目录下,当然也可以手工修改这个位置。 具体可以参考如下三种方式:
- 通过添加系统变量
GRADLE_USER_HOME
; - 设置虚拟机参数
org.gradle.user.home
属性; - 设置虚拟机参数
org.gradle.user.home
属性;
离线模式(总是采用缓存内容)
Gradle提供了一种离线模式,可以让你构建时总是采用缓存的内容而无需去联网检查,如果你并未采用动态版本特性且可以确保项目中依赖的版本都已经缓存到了本地,这无疑是提高构建速度的一个好选择。开启离线模式只需要在执行命令时候添加–offline参数即可。当然,采用这种模式的也是有代价的,如果缓存中搜寻不到所需依赖会导致构建失败。