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

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

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

Gradle 中的依赖管理

dependency management resolution
图 1. 依赖管理一览

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

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

  • 此项目构建 Java 源代码。

  • 一些 Java 源文件从 Google Guava 库导入类。

  • 此项目使用 JUnit 进行测试。

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.base(Guava 包))向 Java 项目添加代码,该代码将成为依赖项
在此示例中,理论项目使用 Guava 版本 32.1.2-jre 和 JUnit 4.13.2 作为依赖项
构建工程师可以声明不同作用域的依赖项。例如,您可以声明仅在编译时使用的依赖项。Gradle 将依赖项的作用域称为配置

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

元数据描述依赖项。元数据的一些示例包括

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

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

  • 依赖项的作者

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

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

gradle core test build scan dependencies
图 2. 构建扫描依赖项报告