【问题描述】
最近 gradle 在下载 maven 私服上的 aar 快照的时候,突然提示下载不了 xxx.jar。可是 maven 私服上只有 aar 包,并没有 jar 包。
【原因分析】
第一次尝试:从后缀入手:
因为 build.gradle 里没有指定后缀,刚好 gradle 又升了级,心想是不是应该在 compile 的配置末尾加上 “@aar” 指定后缀,于是加上,果然好了。
可是还是提示下不来 aar。
第二次尝试:从 aar 包入手:
发现上传的 aar 包怎么多了,分别上传了 debug 和 release 版本,我只要 release ( ⊙ o ⊙ )啊!
然后又哼哧哼哧改上传 aar 的脚本,加了个重命名函数,重新出了新的 aar 快照包并上传 maven 私服,果然,上传的包恢复如初。
可是项目工程依旧提示下不了 aar。
第三次尝试:有第二次的发现,这次仔仔细细对照 aar 的名字,发现gardle 下载的 aar 包的时间戳不对!竟然取的是老的包( ⊙ o ⊙ )!
想着这简单嘛,清一下 gradle 缓存。按下述缓存目录,找到 aar 存储的地址,删了:
~/.gradle/caches/modules-2/files-2.1/com/**/**
这样总成了吧?可是,取的还是老版本的包。( ⊙ o ⊙ )啊!!!!
【解决方案】
终于,还是查官网,找到了方法:
$ gradle build --refresh-dependencies
原来这么简单?第一次尝试的方法,加 @aar 的步骤也可以免了,一切恢复正常:)
解释:
Gradle 的依赖缓存可能与配置库当前状态不同步。比如配置错误、nexus 包不存在、下载中断、手工删除本地缓存(我的第三种尝试)等,都会影响正常下载。
所以如果要刷新依赖关系缓存中的所有依赖关系,就要在 build 后使用 --refresh-dependencies选项,它会重新计算动态版本并下载。
参考:
https://docs.gradle.org/current/userguide/dependency_management.html#sub:cache_refresh