Gradle 可以从一个或多个仓库解析本地或外部依赖,这些仓库基于 Maven、Ivy 或扁平目录格式。

单个项目使用的仓库在您的 build.gradle(.kts) 文件中声明

build.gradle.kts
repositories {
    mavenCentral()
    maven {
        url = uri("https://repo.spring.io/snapshot/")
    }
}
build.gradle
repositories {
    mavenCentral()
    maven {
        url = 'https://repo.spring.io/snapshot/'
    }
}

要在您的 settings.gradle(.kts) 文件中集中管理仓库声明,请前往 集中管理仓库声明

声明公共可用的仓库

构建软件的组织可能希望利用公共二进制仓库来下载和使用公共可用的依赖。

Gradle 为这些广泛使用的仓库提供了内置的简写符号。

dependency management shortcut repositories

在底层,Gradle 从简写符号定义的公共仓库的相应 URL 解析依赖。

或者,您可以 显式指定仓库的 URL 以获得更精细的控制。

Maven Central 仓库

Maven Central 是一个流行的仓库,托管开源库,供 Java 项目使用。

要为您的构建声明 Maven Central 仓库,请将此添加到您的脚本中

build.gradle.kts
repositories {
    mavenCentral()
}
build.gradle
repositories {
    mavenCentral()
}

Google Maven 仓库

Google 仓库托管特定于 Android 的工件,包括 Android SDK。有关用法示例,请参阅 相关的 Android 文档

要声明 Google Maven 仓库,请将其添加到您的构建脚本中

build.gradle.kts
repositories {
    google()
}
build.gradle
repositories {
    google()
}

通过 URL 声明自定义仓库

大多数企业项目都设置一个仅在内部网中可用的二进制仓库。内部仓库使团队能够发布内部二进制文件、设置用户管理和安全措施,并确保正常运行时间和可用性。

如果您想声明 Gradle 未提供简写符号的公共可用仓库,指定自定义 URL 也很有帮助。

具有自定义 URL 的仓库可以指定为 Maven 或 Ivy 仓库,方法是调用 RepositoryHandler API 上可用的相应方法

build.gradle.kts
repositories {
    maven {
        url = uri("http://repo.mycompany.com/maven2")
    }
}
build.gradle
repositories {
    maven {
        url = "http://repo.mycompany.com/maven2"
    }
}

除了 httphttps 之外,Gradle 还支持其他 协议,例如自定义 URL 的 filesftps3

有关完整信息,请参阅关于 支持的仓库类型 的部分。

您还可以通过使用 ivy { } 仓库 定义您自己的仓库布局,因为它们在模块如何在仓库中组织方面非常灵活

build.gradle.kts
repositories {
    ivy {
        url = uri("http://repo.mycompany.com/repo")
    }
}
build.gradle
repositories {
    ivy {
        url = "http://repo.mycompany.com/repo"
    }
}

声明多个仓库

您可以定义多个仓库来解析依赖。如果某些依赖项仅在一个仓库中可用,而在另一个仓库中不可用,则声明多个仓库很有帮助。

您可以混合使用 参考部分 中描述的任何类型的仓库。

build.gradle.kts
repositories {
    mavenCentral()
    maven {
        url = uri("https://repo.spring.io/release")
    }
    maven {
        url = uri("https://repository.jboss.org/maven2")
    }
}
build.gradle
repositories {
    mavenCentral()
    maven {
        url = "https://repo.spring.io/release"
    }
    maven {
        url = "https://repository.jboss.org/maven2"
    }
}

仓库声明的顺序决定了 Gradle 在解析期间搜索依赖项的顺序。如果 Gradle 在特定仓库中找到依赖项的元数据,它将尝试从*同一仓库*下载该模块的所有工件。

您可以了解更多关于 依赖项下载 的内部工作原理。

插件仓库

Gradle 使用不同的仓库集来解析 Gradle 插件和解析项目依赖项

  1. 插件依赖项: 当为构建脚本解析插件时,Gradle 使用一组不同的仓库来定位和加载所需的插件。

  2. 项目依赖项: 当解析项目依赖项时,Gradle 仅使用在构建脚本中声明的仓库,而忽略插件仓库。

默认情况下,Gradle 使用 Gradle 插件门户 来搜索插件

settings.gradle.kts
pluginManagement {
    repositories {
        mavenCentral()
        gradlePluginPortal()
    }
}
settings.gradle
pluginManagement {
    repositories {
        mavenCentral()
        gradlePluginPortal()
    }
}

但是,某些插件可能托管在其他仓库(公共或私有)中。要包含这些插件,您需要在您的构建脚本中指定额外的仓库,以便 Gradle 知道在哪里搜索。

由于声明仓库取决于插件的应用方式,请参阅 自定义插件仓库 以获取有关为来自不同来源的插件配置仓库的更多详细信息。