maven 库 SNAPSHOT 含义?aar 更新无效?gra
2019-11-26 本文已影响0人
Ronnie_火老师
使用 maven 库的资源(比如 aar)是日常开发中经常使用的方式,无论 aar 是第三方的还是自己团队开发的,这种方式都给代码封装和重用带来了诸多便利。
引入的 aar 经常能看到 SNAPSHOT 后缀或者 changing = true 字样,还会遇到 aar 更新后不生效问题,本文就简介一下相关含义和原因。
SNAPSHOT
示例:
implementation('com.***.plugin:1.0.4-SNAPSHOT')
- 加和不加 SNAPSHOT 的区别是:
- 加了 SNAPSHOT 后缀,gradle 会自动认为:该 aar 只是一个”快照“,还处在开发阶段,会经常性的更新。这种状态下,我们修改了 aar 后不需要修改版本号,相同版本的 aar 可以在 maven 库直接覆盖,并使依赖该 aar 的项目生效;
- 不加 SNAPSHOT 后缀表示是稳定版,此时相同版本的 aar 不能覆盖,只能修改版本号后再上传到 maven;
- 显然,SNAPSHOT 后缀适合在开发调试期使用,stable 版本适合在不需要经常修改 aar 或者在发版上线时使用;
changing = true
示例:
implementation ('com.***.plugin':1.4) { changing = true }
- 对 gradle 而言,changing = true 和标记 SNAPSHOT 后缀功能是一样的,所以(需要时)设置一项即可;
cache
也许你会发现,标记了 chaning = true 或加入了 SNAPSHOT 后缀后,aar 的更新(没有升级版本号)并没有在依赖的项目中生效,原因是 gradle 有缓存机制,而且默认的缓存时间是 24 小时,所以需要进行如下配置,修改 gradle 缓存时间为 0 秒,来达到 aar 立即生效的效果;
configurations.all {
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}
如果不进行缓存时间设置,就需要手动清空 gradle 缓存,在 ~/.gradle/caches 目录下,搜索相关的文件并删除;还有一种说法是加入 --refresh--dependeces (例如 ./gradlew build --refresh-dependencies) 参数,相当于强制刷新依赖,但是这个没试过;