软件项目通常依赖于其他库才能运行。这些库可以来自同一构建中的其他项目,也可以来自外部仓库。

Gradle 的依赖管理基础设施提供了 API,用于声明、解析和暴露项目所需和提供的二进制文件。

理解 Gradle 中的依赖管理对于将项目组织成组件非常重要。当您想要重用现有库或需要在管理库版本的同时升级这些库时,它也很重要。

让我们看一个 Java 项目,其中的代码依赖于 Guava,Guava 是 Google Core Java 库套件。该项目的构建文件包含以下内容

build.gradle.kts
dependencies {
    implementation("com.google.guava:guava:32.1.2-jre")
    api("org.apache.juneau:juneau-marshall:8.2.0")
}
build.gradle
dependencies {
    implementation("com.google.guava:guava:32.1.2-jre")
    api("org.apache.juneau:juneau-marshall:8.2.0")
}

dependencies 代码块中,声明依赖时有三点需要注意

  1. 配置:implementation 也称为依赖应用的作用域

  2. 模块 ID:com.google.guava:guavagroup 和可唯一标识的工件 name 组成

  3. 版本:32.1.2-jre 并非总是必需

依赖可以是本地的或外部的。要让 Gradle 知道在哪里查找外部依赖,请使用 Build 文件 中的 repositories{} 代码块。

让我们扩展我们的示例

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

dependencies {
    implementation("com.google.guava:guava:32.1.2-jre")
    api("org.apache.juneau:juneau-marshall:8.2.0")
}
build.gradle
repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation("com.google.guava:guava:32.1.2-jre")
    api("org.apache.juneau:juneau-marshall:8.2.0")
}

在此示例中,Gradle 从 Maven CentralGoogle 仓库 获取 guavajuneau-marshall 依赖

1. 基础知识

如果您想了解依赖管理的基础知识并且是 Gradle 新手,请从此处开始。

2. 声明依赖

您可以将外部库添加到您的 Java 项目中,例如 Guava。这些库是您项目的依赖。它们是使用构建文件中的 dependencies{} 代码块添加的。

3. 声明仓库

您可以声明仓库以告诉 Gradle 在哪里获取外部依赖。在构建期间,Gradle 会定位并下载依赖,此过程称为依赖解析

4. 集中管理依赖

为了将依赖及其版本保存在单个、可管理的位置(即集中式),您可以使用平台版本目录

平台是一组旨在一起使用的模块。版本目录是可以被多个项目引用的集中式依赖坐标列表。

5. 管理依赖

当同一个库被多次声明,或者当不同的库提供相同的功能时,可能会出现冲突。这通常会导致构建失败。

您可以使用解析规则依赖锁定来管理冲突。

6. 理解依赖解析

为了影响 Gradle 如何解析依赖,重要的是要理解其工作原理。本节介绍变体、属性、能力和依赖缓存。

7. 控制依赖解析

一旦您掌握了依赖解析的工作原理,您就可以查看、控制和影响它。本节介绍图解析和工件解析,以及工件转换。

8. 发布库

如果您正在考虑发布您的库以作为依赖项使用,请查看我们的发布章节