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
}

可用模式

依赖解析管理有三种模式

模式 描述 默认? 用例

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
}