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

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

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

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

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

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

  1. 配置:implementation,也称为依赖项所应用的范围。

  2. 模块 ID:com.google.guava:guava 由一个 group 和一个 name 组成,它们是唯一可识别的。

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

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

让我们扩展我们的示例:

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


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


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

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

学习基础知识

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

1. 声明依赖项

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

2. 依赖配置

为 Gradle 项目声明的每个依赖项都适用于一个特定的范围,称为配置。这些配置通常通过应用插件创建,或者必须直接使用 API 创建。

3. 声明仓库

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

4. 集中管理依赖项

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

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

5. 管理约束和冲突

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

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

高级概念

为了影响 Gradle 如何解析依赖项,了解其工作原理非常重要。

1. 依赖解析

Gradle 的依赖解析过程确定需要哪些模块和版本才能满足构建声明的依赖项。它分为两个步骤:图解析工件解析

2. 图解析

图解析期间,Gradle 构建一个依赖图,解决版本冲突并确保选择了预期的依赖项。

3. 变体选择

变体选择通过根据属性功能选择每个模块最兼容的变体来遍历已解析的依赖图。

4. 工件解析

最后,工件解析是 Gradle 如何确定在构建期间下载和使用所选变体发布的哪些文件或工件