Gradle 报依赖解析失败时应优先核对 group、name、version 坐标拼写,检查大小写、SNAPSHOT/正式版匹配、Kotlin DSL 引号与语法、仓库配置是否覆盖目标源,并用 ./gradlew buildEnvironment 和 dependencies 命令验证。

确认依赖坐标拼写是否正确
Gradle 报 Could not resolve 或 Could not find 时,第一反应不该是换仓库,而是核对 group、name、version 三段式坐标有没有手误。常见错误包括:
-
group写成com.google.guava(正确),但误写为com.google.guavae或漏掉.google -
name大小写错:比如guava写成Guava(Maven 中 artifactId 是纯小写) -
version混用 SNAPSHOT 和正式版,例如1.0.0-SNAPSHOT却没配 snapshot 仓库,或1.0.0实际只发布了1.0.0-rc1 - 用了 Kotlin DSL 却忘了加引号:
implementation "com.squareup.okhttp3:okhttp:4.12.0"缺少双引号会直接编译失败
检查仓库配置是否覆盖目标依赖的发布源
不是所有库都发在 Maven Central。比如:
-
androidx.*依赖必须有google()或maven { url "https://maven.google.com" } -
com.squareup.okhttp3从 4.9.0 起只发在mavenCentral(),旧版可能还在 JCenter(已停服,删掉jcenter()配置) - 私有库或快照库需要显式声明 URL 和认证(如
credentials),且maven { ... }块要放在repositories顶层,不能嵌套在buildscript里(那是给插件用的) - 多模块项目中,如果在
settings.gradle里用了enableFeaturePreview("VERSION_CATALOGS"),记得检查libs.versions.toml里的版本别名是否正确定义,且没拼错 key
用 Gradle 自带命令快速验证坐标是否存在
别急着打开浏览器搜,先本地跑两行命令:
-
./gradlew dependencies --configuration compileClasspath—— 查看当前配置下已解析的依赖树,确认该坐标是否出现在其中(或被 evicted) -
./gradlew buildEnvironment—— 看实际生效的仓库列表,确认你写的mavenCentral()确实被加载了,而不是被其他脚本覆盖或注释掉了 - 如果怀疑是网络或镜像问题,临时加
-Dorg.gradle.internal.http.connectionTimeout=10000并开--info,观察 Gradle 输出的下载 URL 是否可访问(比如它是否试图连https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.12.0/这个路径)
注意 Kotlin DSL 与 Groovy DSL 的语法差异点
同一个坐标,在两种 DSL 里写法稍有不同,容易因复制粘贴出错:
- Groovy 允许省略引号:
implementation 'com.squareup.okhttp3:okhttp:4.12.0';Kotlin DSL 必须加双引号:implementation("com.squareup.okhttp3:okhttp:4.12.0") - 仓库声明中,Groovy 用
mavenCentral(),Kotlin DSL 同样可用,但若需自定义 URL,Groovy 写maven { url "https://..." },Kotlin DSL 要写成maven { url = uri("https://...") } - 使用
platform(...)或bom(...)时,Kotlin DSL 要求类型明确,比如enforcedPlatform("org.springframework.boot:spring-boot-dependencies:3.2.0"),漏掉enforcedPlatform直接写platform(...)可能静默失效
真正卡住的时候,往往不是仓库没配,而是坐标里某个字母大小写错了,或者版本号在那个仓库根本没发布——先用 ./gradlew buildEnvironment 确认仓库列表,再用浏览器直接访问对应 URL 看 404 页面返回的路径,比猜快得多。










