软件项目很少单独工作。项目通常依赖于库中的可重用功能。一些项目将不相关的功能组织到模块化系统的单独部分中。

依赖管理是一种用于声明、解析和使用项目所需功能的自动化技术。

有关依赖关系管理术语的概述,请参阅依赖关系管理术语

Gradle 中的依赖管理

依赖管理解析
图 1. 依赖关系管理概览

Gradle 内置了对依赖管理的支持。

让我们借助一个理论但常见的项目来探讨主要概念:

Gradle 构建文件可能如下所示:

build.gradle.kts
plugins {
    `java-library`
}

repositories { (1)
    google() (2)
    mavenCentral()
}

dependencies { (3)
    implementation("com.google.guava:guava:32.1.2-jre") (4)
    testImplementation("junit:junit:4.13.2")
}
build.gradle
plugins {
    id 'java-library'
}

repositories { (1)
    google() (2)
    mavenCentral()
}

dependencies { (3)
    implementation 'com.google.guava:guava:32.1.2-jre' (4)
    testImplementation 'junit:junit:4.13.2'
}
1 这里我们为项目定义存储库。
2 在这里,我们为依赖位置声明远程和本地存储库。

您可以声明存储库来告诉 Gradle 在哪里获取本地或远程依赖项
在此示例中,Gradle从Maven CentralGoogle存储库获取依赖项。 在构建过程中,Gradle 会查找并下载依赖项,这个过程称为依赖项解析。然后,Gradle将解析的依赖项存储在称为依赖项缓存的本地缓存中。后续构建使用此缓存来避免不必要的网络调用并加快构建过程。

3 这里我们定义项目使用的依赖项。
4 这里我们声明了一个范围内的具体依赖名称和版本。

您可以从外部库(例如com.google.common.baseGuava 包)向 Java 项目添加代码,该库将成为依赖项
在此示例中,理论项目使用 Guava 版本 32.1.2-jre 和 JUnit 4.13.2 作为依赖项
构建工程师可以声明不同范围的依赖关系。例如,您可以声明仅在编译时使用的依赖项。 Gradle 将依赖项的范围称为配置。

存储库提供多种格式的依赖项。有关 Gradle 支持的格式的信息,请参阅依赖项类型

元数据描述依赖关系。元数据的一些示例包括:

  • 用于在存储库中查找依赖项的坐标

  • 有关创建依赖项的项目的信息

  • 依赖项的作者

  • 依赖项正常工作所需的其他依赖项,称为传递依赖项

您可以根据项目的要求自定义 Gradle 对传递依赖项的处理。

具有数百个已声明依赖项的项目可能很难调试。 Gradle 提供了可视化和分析项目依赖关系图(即依赖关系树)的工具。您可以使用Build Scan™内置任务

gradle 核心测试构建扫描依赖项
图 2. 构建扫描依赖性报告