当我们开发代码时,我们通常使用第三方或开源库。这些库需要在编译器【compiler】的类路径【classpath】中可用,否则我们将得到错误,构建将失败。Gradle 支持依赖管理【dependency management】,所以我们可以在构建文件【build file】中定义我们的依赖。然后,Gradle 将负责各种任务的必要配置。
在本章中,我们将讨论如何在我们的构建中使用依赖管理【dependency management】。我们将看到如何通过配置来组织依赖关系。我们还将讨论托管依赖项工件【host dependency artifacts】的存储库【repositories】、它们的依赖项以及如何处理不同的存储库布局。
然后,我们将使用 Gradle 语法为带有版本信息的模块定义依赖关系。
Dependency configuration
Java 没有真正支持将版本化库作为依赖项使用。例如,我们无法在 Java 中表示类是依赖于 lib-1.0.jar 还是 lib- 2.0.jar。有一些开源解决方案可以处理依赖关系,并允许我们表示我们的 Java 代码是依赖于 lib- 1.0.jar 还是 lib-2.0.jar。最流行的是 Maven 和 Apache Ivy。Maven是一个完备的构建工具,且具有依赖管理机制。而 Ivy 只关心依赖管理。
这两个工具都支持存储库【repositories】,其中版本库【versioned libraries】与这些库的元数据一起存储。库可以依赖于其他库,并在库的元数据中进行描述。元数据在描述符 XML 文件【descriptor XML files】中描述。Ivy 完全支持 Maven 描述符文件和存储库【repositories】;它还增加了一些额外的功能。因此,使用Ivy,您可以得到Maven 所需要的东西,甚至更多。这就是为什么 Gradle 在底层使用 Ivy API 来执行依赖管理的原因。Gradle还在 Ivy 基础上添加了一些额外的功能,因此我们可以以一种非常灵活的方式定义和使用依赖关系。
在 Gradle 构建文件中,我们将依赖项【dependencies】组合在一个配置【configuration】中。配置有名称,配置可以相互扩展。通过配置,我们可以对依赖项进行逻辑分组。例如,我们可以创建一个 javaCompile 配置来包含编译 Java 代码所需的依赖项。我们可以向构建中添加任意多的配置。我们不直接在配置中定义依赖关系。与标签一样,配置可以在定义依赖关系时使用。