事情是这样的。
这周二,同事提交了一个组件的新版本0.1.0
,更新了工程里对这个组件的依赖的版本号之后,Sync Now
成功,但发现新版本把以前的一个接口移除了,需要重新加回来。
于是乎,同事重新提交了组件,然而版本号不变,依然保持0.1.0
。
接着悲剧就发生了。由于之前Gradle 本地已经下载到了旧的0.1.0
版本的组件,这个组件缓存到了本机的cache中,后续Gradle发现本地已有0.1.0
版本,就不会重复发起网络请求去拉取这个组件,因而本地使用的,就一直是旧的那份缓存,而非服务器上更新过的那份。
解决问题关键,就是让Gradle重新去下载依赖的组件。有两种方式:
清除Gradle 的缓存:缓存所在路径为
~/.gradle/caches/
,简单粗暴地使用rm -rf ~/.gradle/caches/
干掉所有缓存,自然就能让Gradle重新下载依赖的组件。但这种方式过于粗暴,会影响全局所有的缓存,不仅仅是所有工程的依赖,还包括Gradle Wrapper依赖的Gradle 版本缓存。另一种方式,是在执行 Gradle 脚本任务的命令后面,追加
--refresh-dependencies
参数,让Gradle在执行过程中,刷新相关的依赖。这样就能做到仅刷新当前工程的依赖,而不影响其他的东西。示例:./gradlew :app:assembleDebug --refresh-dependencies
参考资料
How can I force gradle to redownload dependencies?
The Gradle build system- Tutorial