build.gradle与settings.gradle中定义repositories的区别及配置必要性
Gradle 两个配置文件中repositories的作用及区别说明
两者的作用差异
settings.gradle中pluginManagement.repositories:作用是提供Gradle插件的下载仓库地址。Gradle项目初始化的优先级最高的阶段就会读取该配置,拉取项目所需的所有Gradle插件(比如Java插件、Spring Boot插件等),这个阶段还未加载build.gradle的配置,因此插件的下载仓库必须在此处配置才能生效。示例中的allowInsecureProtocol = true配置也是作用于插件拉取环节,允许使用HTTP协议的非加密仓库。build.gradle中repositories:作用是提供项目业务依赖的下载仓库地址,比如项目引入的okhttp、spring-core等第三方依赖包,都会从该配置的仓库中拉取,该配置仅在项目构建的依赖解析阶段生效。
仅在单个文件定义是否能满足需求
绝大多数场景下无法仅通过单个文件配置满足需求,二者的生效阶段、负责的资源类型完全独立,互不覆盖:
- 仅在
settings.gradle配置:Gradle可以正常拉取所需插件,但项目业务依赖没有对应的拉取地址,构建过程会直接报依赖缺失错误。 - 仅在
build.gradle配置:项目初始化阶段拉取插件时找不到对应的仓库地址,构建在最开始就会报插件下载失败的错误,根本不会执行到读取build.gradle配置的阶段。
唯一的例外场景是使用Gradle 7.0及以上版本时,可通过dependencyResolutionManagement块在settings.gradle中统一管理全项目的业务依赖仓库,无需在每个build.gradle中重复配置,但这种场景下仍然需要在settings.gradle中同时配置插件仓库和业务依赖仓库,本质还是覆盖了两类配置的需求,不属于仅在单文件配置原有两类功能的情况。
内容的提问来源于stack exchange,提问作者byronaltice
相关产品推荐
相关产品推荐

