依赖锁定 (Dependency Locking)
源:依赖锁定指南
即使你没有在版本号中使用 +,某些库的传递依赖(依赖的依赖)也可能发生变化。Dependency Locking 允许你记录下项目中所有依赖的精确快照。
1. 为什么要锁定?
场景
假设库 A 依赖 okhttp:[3.0, 4.0)。今天你编译时 okhttp 是 3.8,明天 okhttp 发布了 3.9,你的代码可能因为 okhttp 的细微变动而产生 Bug。
- 确定性: 保证所有开发机器和 CI 编译出的产物完全一致。
- 安全: 防止依赖库在未声明的情况下偷偷升级版本。
2. 开启锁定
在 build.gradle.kts 中配置:
kotlin
dependencyLocking {
lockAllConfigurations()
}3. 生成锁文件
运行以下命令,Gradle 会在每个模块下生成 gradle.lockfile:
bash
./gradlew resolveDependencies --write-locks锁文件内容如下:
text
# 此文件由 Gradle 自动生成
com.squareup.okhttp3:okhttp:4.9.0=compileClasspath,runtimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:1.9.0=compileClasspath4. 日常维护
- 同步锁: 将
*.lockfile提交到 Git。 - 升级依赖: 当你想主动升级某个库时,再次运行
--write-locks。 - 强制校验: 如果有人手动改了
build.gradle但没更新锁文件,构建会报错,提醒同步。