重塑“构建”
这些特性会影响构建人员及开发人员的产品效率。
构建逻辑都是可测试的代码(脚本)
Groovy DSL
正如大家想象的一样,Groovy构建脚本语言通常被用来像配置一样来设置项目的属性、配置依赖以及声明任务等等。Gradle的配置特性是基于Groovy语言结构的。
Kotlin DSL
Gradle的Kotlin DSL为传统的Groovy DSL提供了另一种语法,它在支持的IDE中提供了增强的编辑体验,并提供了出色的内容帮助、重构、文档编制等功能。
Gradle的内置插件
Gradle 构建的内置插件可以用于创建各种类型的新的Gradle构建(Java应用程序、Java库、Groovy库、Kotlin应用程序等),或者将现有的构建(例如Apache Maven构建)转换成Gradle构建。
依赖管理
传递依赖
使用依赖项管理系统的主要好处之一是管理可传递的依赖项。Gradle负责下载和管理传递依赖项。
自定义依赖范围
不要被一组预定义的依赖范围(编译、运行时等)所限制。Gradle允许您定义任意的依赖范围。例如,对于您可能在构建中建模的集成测试,提供构建中需要的工具链,等等……
基于文件的依赖关系
并非所有依赖项都可以从外部仓库获得。当使用托管依赖项或迁移遗留构建时,在文件系统资源上声明依赖项是不实际的。
自定义仓库
您可以通过自定义设计来声明仓库,使用自定义设计您可以有效地将几乎任何文件系统目录结构视为组件仓库。
第三方依赖缓存
依赖项可以从远程仓库下载或缓存到本地,之后的构建可以直接使用缓存而不需要联网。
兼容Maven和Ivy仓库
Gradle是兼容的,它通过POM或IVY元数据格式来定义依赖保证兼容性从而可以重用任何Maven或IVY兼容的仓库。Ivy元数据公开的自定义解析规则,允许您过滤组件分支、状态或其他自定义元数据信息。
天生BOM支持
平台定义,也就是Maven BOM的依赖是天生支持的,允许导入像Spring Boot平台定义的组件一样而不需要使用外部插件。
动态依赖
解析的依赖项版本可以是动态的。Gradle支持Maven快照机制,但功能更强大。您可以声明对最新版本、最新开发版本甚至最新的5.X版的依赖构建。
动态依赖锁定
允许构建在使用动态依赖项版本时保持确定性和可重现性。
动态依赖项选择规则
定义自定义规则以在声明动态依赖项时选择特定的版本。规则可以基于名称和版本,也可以基于分支或状态等扩展元数据。规则也可以根据构建所处的环境而有所不同,例如local或CI。
依赖版本一致
依赖项对齐允许逻辑组中的不同模块(例如Jackson模块)对齐到相同的版本。
版本冲突解决
默认情况下,Gradle使用最新请求版本解决冲突。您也可以自定义此行为。
替换兼容库
使用依赖项替换规则来确定应该将依赖项视为类似的。例如log4j和log4j-over-slf4j。您可以告诉Gradle只能选择一个版本,然后使用Gradle的冲突解决方案从两个版本中选择最新的版本。类似的用例是在依赖关系图中有spring-all和spring-core这样的库的情况。如果不对其进行适当的建模,应用程序的适当行为将取决于类路径中非常简单的顺序。
增强的元数据解析支持
依赖项元数据可以在下载存储库元数据之后修改,但是需要在它被Gradle选择为最终解析版本之前修改。这允许创建自定义规则来执行诸如在更改(或快照)版本时声明模块或使用自定义状态模式等操作。
替换外部和项目依赖项
动态地替换项目依赖项的外部依赖项,反之亦然。当您的模块只有一个子集在本地签出时尤其有用。