mavenCentral()必须嵌套在repositories块中才生效,单独调用无效;Android项目AGP 8.0+需统一配置在settings.gradle的dependencyResolutionManagement块内,并建议搭配阿里云镜像提升稳定性与速度。

mavenCentral() 就是配置 Maven Central 仓库的最简方式,但直接写它可能不生效——关键在放哪儿、跟谁一起用、以及 Gradle 版本是否允许。
为什么 mavenCentral() 单独写没反应?
Gradle 不会自动启用任何仓库,必须显式声明在 repositories 块里。如果你只在 build.gradle 里写了 mavenCentral() 但没包进 repositories { ... },它就只是个孤立函数调用,不会起作用。
- 错误写法:
mavenCentral()(顶层裸调) - 正确位置:必须嵌套在
repositories块中,且需配合dependencyResolutionManagement(新项目)或allprojects/subprojects(老结构) - Android 项目尤其注意:从 AGP 8.0+ 起,
build.gradle中的repositories已被弃用,必须统一挪到settings.gradle的dependencyResolutionManagement块里
settings.gradle 里怎么配才真正生效?
这是当前(2026 年)推荐的、兼容性最好的写法,适用于新建的 Android 或 Java/Kotlin Gradle 项目:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
google()
maven { url 'https://maven.aliyun.com/repository/public/' }
}
}
-
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)是安全兜底:禁止子项目私自覆盖仓库,避免依赖来源混乱 - 顺序很重要:
mavenCentral()放前面,但国内用户建议加阿里云镜像(https://maven.aliyun.com/repository/public/),它本质是中央仓库的缓存,响应更快、更稳定 - 不要混用
maven { url 'https://repo1.maven.org/maven2/' }和mavenCentral()——后者是前者的封装,且 Gradle 7+ 默认禁用 HTTP,硬写 URL 容易因协议或路径过时失败
为什么有时候 mavenCentral() 下不到包?
常见不是仓库配错了,而是依赖解析被提前终止了:
- 仓库顺序问题:如果前面有
mavenLocal()或私有 Nexus,而你要的版本恰好本地不存在、私有库又没同步全,Gradle 就卡住或报Could not resolve,而不是继续往后查mavenCentral() - 网络拦截:公司防火墙或代理可能屏蔽
https://repo1.maven.org,但允许阿里云镜像;此时保留mavenCentral()没用,得换成镜像 URL - Gradle 版本太低:Gradle 5.x 及更早默认用 HTTP 协议访问中央仓库,2026 年多数环境已强制 HTTPS,导致连接拒绝;升级到 Gradle 6.8+ 可规避
- 依赖坐标拼错:比如把
com.squareup.okhttp3:okhttp:4.12.0写成com.squareup.okhttp:okhttp:4.12.0(少了个3),mavenCentral()当然找不到——它不负责猜坐标
发布到 Maven Central 要不要配 mavenCentral()?
不需要。发布是上传动作,和下载仓库无关。mavenCentral() 只影响“拉依赖”,不影响“推构件”。发布到中央仓库靠的是 publishToMavenCentral()(来自 com.vanniktech.maven.publish 插件),它走的是 Sonatype OSSRH 提交流程,跟 repositories 配置完全隔离。
- 混淆点:有人以为发布也要“连上中央仓库”,其实不是——你是在向 Sonatype 提交待审构件,审核通过后才由 Sonatype 同步到中央仓库
- 真正要配的是
signing、GPG 密钥、Sonatype 凭据,这些都写在gradle.properties和build.gradle的publishing块里 - 误配
mavenCentral()到publishing.repositories会导致构建失败,因为中央仓库不允许直传
最容易被忽略的一点:Gradle 会缓存仓库元数据(比如 maven-metadata.xml),哪怕你改了 settings.gradle,旧缓存也可能让依赖解析行为滞后。遇到“明明配了却还下不到”,先删 $GRADLE_USER_HOME/caches/modules-2/metadata- 下的对应目录再试。











