Gradle 提供了一种集中声明所有项目仓库的方法,而不是在每个子项目或通过 allprojects 代码块中声明。

集中声明仓库是一个孵化中的功能。

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

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

dependencyResolutionManagement 的 repositories 代码块接受与项目文件中相同的记法,包括带或不带凭据的 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
}