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) 文件中,请参阅集中管理仓库声明

声明一个公共可用仓库

构建软件的组织可能希望利用公共二进制仓库来下载和使用公共可用的依赖项。流行的公共仓库包括Maven CentralGoogle Android仓库。

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

dependency management shortcut repositories

在底层,Gradle 从简写符号定义的公共仓库的相应 URL 解析依赖项。所有简写符号都可以通过 RepositoryHandler API 获得。

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

Maven Central 仓库

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

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

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

Google Maven 仓库

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

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

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

通过 URL 声明自定义仓库

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

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

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

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"
    }
}

声明一个本地仓库

您可以在 repositories 块中使用 mavenLocal()flatDir 方法声明本地仓库

repositories {
    mavenLocal()  // Uses the local Maven repository (~/.m2/repository)
    maven {
        url = uri("/path/to/local/repo")  // Replace with your actual local repo path
    }
    flatDir {
        dirs 'libs'  // Assumes JARs are in the 'libs' directory
    }
}

可以通过指定本地文件系统路径将 Maven 或 Ivy 声明为本地仓库。与平面目录仓库不同,它们遵循结构化格式并包含元数据。

当配置了这样的仓库时,Gradle 会完全绕过其对该仓库的依赖缓存,因为无法保证其内容在不同执行之间保持不变。此限制可能会对性能产生负面影响。

此外,使用本地 Maven 或 Ivy 仓库会使得构建的可重现性更难实现。因此,它们的使用应仅限于原型开发,而不是生产构建。

声明多个仓库

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

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

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 在特定仓库中找到依赖项的元数据,它将尝试从同一个仓库下载该模块的所有 Artifacts。

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

声明插件仓库

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

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

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

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

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

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

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