Skip to content

依赖锁定 (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=compileClasspath

4. 日常维护

  • 同步锁: 将 *.lockfile 提交到 Git。
  • 升级依赖: 当你想主动升级某个库时,再次运行 --write-locks
  • 强制校验: 如果有人手动改了 build.gradle 但没更新锁文件,构建会报错,提醒同步。