Gradle 提供了一种集中声明仓库的方式,而不是在构建的每个子项目或通过 allprojects 块中声明仓库。

集中声明仓库是一项正在孵化中的功能。

您可以在 settings.gradle(.kts) 文件中声明约定在每个子项目中使用的仓库

settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}
settings.gradle
dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

dependencyResolutionManagement 仓库块接受与项目中相同的表示法,包括 Maven 或 Ivy 仓库,无论是否带有凭据。

仓库模式

默认情况下,在项目的 build.gradle(.kts) 文件中声明的仓库将覆盖在 settings.gradle(.kts) 中声明的仓库。但是,您可以使用 repositoriesMode 设置来控制此行为

settings.gradle.kts
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_PROJECT
}
settings.gradle
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_PROJECT
}

[[sec:available-modes] == 可用模式

依赖项解析管理有三种模式

模式 描述 默认? 用例

PREFER_PROJECT

项目中声明的仓库将覆盖在 settings.gradle(.kts) 中声明的仓库。

当团队需要使用特定于其子项目的不同仓库时很有用。

PREFER_SETTINGS

settings.gradle(.kts) 中声明的仓库将覆盖在项目中声明的仓库。

对于在大型团队中强制执行使用批准的仓库很有用。

FAIL_ON_PROJECT_REPOS

在项目中声明仓库会触发构建错误。

严格强制执行使用在 settings.gradle(.kts) 中声明的仓库。

您可以更改行为以优先使用 settings.gradle(.kts) 中的仓库

settings.gradle.kts
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_SETTINGS
}
settings.gradle
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.PREFER_SETTINGS
}

当使用此模式时,如果项目或插件声明了仓库,Gradle 将会发出警告。

为了强制 使用在 settings.gradle(.kts) 中声明的仓库,您可以配置 Gradle 在声明项目插件时使构建失败

settings.gradle.kts
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
}
settings.gradle
dependencyResolutionManagement {
    repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
}