maven 库 SNAPSHOT 含义?aar 更新无效?gradle 缓存机制?

使用 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) 参数,相当于强制刷新依赖,但是这个没试过;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容