起因
局域网中搭建了Nexus托管本地打包的aar,正常情况下,把修改完成的库推送到仓库后,其他项目引用Snapshot版本的依赖,同步后会马上下载最新的包,但是当第二次+推送后,就没有重新下载最新的包,导致代码一直飘红,但是build的时候,可以看到输出的日志中有Download http://xxx, took xx ms (xxx kB)
,就是刚上传的最新的包,结果编译成功。
现象
代码飘红,编译成功,多次清除缓存,重启均无效,重新上传aar也不行。
尝试解决
- 执行Android Studio --File–invalidate caches… 全部勾上重启,结果没用
- Build–Clean Project ,没用
- 重新打包上传,没用
- 不依赖Snapshot版本,直接指定最新的版本号,同步报错:
Cannot find a version of xxx' that satisfies the version constraints: Dependency path 'xxx:unspecified' --> 'xxx' Constraint path "xxx:unspecified' --> 'xxx:{strictly xxx-SNAPSHOT}' because of the following reason: debugRuntimeClasspath uses version xxx-SNAPSHOT
结果就是没能把最新的包弄下来,还是没用 - 关闭Android studio ,删除
C:\Users\xxx\.gradle\caches
目录,重新打开项目,等待所有依赖下载完毕,恢复正常
最终解决办法
经过我一个个文件夹排除,最终找到如下依赖版本的更新受到如下目录影响:
找到全局的gradle缓存目录一般是C:\Users\xxx\.gradle\caches\
,我这里用的是gradle 7.6.1,所以准确来说,我们的目标文件夹是C:\Users\xxx\.gradle\caches\7.6.1\
,然后我们会发现里面有个md-rule
目录,然后执行如下操作:
- 我们把这个目录里面的所有文件删掉(md-rule.bin、md-rule.lock),如果文件被占用,可以先把
Android Studio
关闭; - 打开
Android Studio
,把当前项目的缓存清理掉(Build--clean Project
),再执行Sync
同步项目,就会把当前的依赖重新下载一遍,可以从Build输出窗口中看到下载的包已经是最新的了。