第 5 章 依赖管理
本章内容包括:
-
了解自动依赖关系管理
-
声明和组织依赖关系
-
针对各种类型的存储库
-
了解和调整本地缓存
-
依赖关系报告和版本冲突解决
在第 3 章中,我们学习了如何声明对 Servlet API 的依赖,从而为 To Do 应用程序实现网络组件。通过 Gradle 的 DSL 配置闭包,可以轻松声明依赖关系,并从资源库中获取它们。首先,使用依赖脚本定义构建所依赖的库。其次,使用 repositories 闭包告诉构建这些依赖库的来源。有了这些信息,Gradle 就会自动解析这些依赖库,必要时将它们下载到你的机器上,存储在本地缓存中,并用于构建。
本章将介绍 Gradle 对依赖管理的强大支持。我们将仔细研究关键的 DSL 配置元素,以便对依赖关系进行分组,并定位不同类型的版本库。
依赖关系管理听起来很容易,但在解决依赖关系冲突时却会变得困难重重。Transitive dependencies,即已声明的依赖关系所依赖的依赖关系,既是福也是祸。复杂的依赖关系图可能会导致多个版本的依赖关系混淆,从而造成不可靠、非确定性的构建。Gradle 提供了分析依赖树的依赖关系报告。你将学会如何找到问题的答案,如 "某个特定的依赖从何而来?" 和 "为什么要选择这个特定的版本?" 以解决版本冲突。
Gradle 有自己的依赖关系管理实现。吸取了 Ivy 和 Maven 等其他依赖管理器的不足,Gradle 特别关注性能、构建可靠性和可重复性。