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 特定的工件,包括 Android SDK。有关使用示例,请参阅相关 Android 文档

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

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

按 URL 声明自定义仓库

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

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

具有自定义 URL 的仓库可以通过调用 RepositoryHandler API 上可用的相应方法来指定为 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"
    }
}

声明本地仓库

您可以使用仓库块中的 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 在特定仓库中找到依赖项的元数据,它将尝试从*同一仓库*下载该模块的所有工件。

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

声明插件仓库

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

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

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

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

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

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

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