构建工具Gradle和Maven的区别(构建工具maven的使用)
首先来介绍一下这两款构建工具,Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。另外一个工具工具Maven,称为项目对象模型(POM),是可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
对比之下,Gradle和Apache Maven之间的主要区别在于灵活性,性能,用户体验和依赖管理。首先来看使用Maven和Gradle(无构建缓存)的Apache Commons Lang库的并行完整构建。
一、灵活性
Google选择Gradle作为Android的官方构建工具 ; 不是因为构建脚本是代码,而是因为Gradle以最基本的方式可扩展的方式进行建模。Gradle的模型还允许将其用于C / C ++的本机开发,并且可以扩展为涵盖任何生态系统。例如,Gradle在使用Tooling API的时候就考虑了嵌入。Gradle和Maven都提供了配置约定。但是,Maven提供了一个非常僵化的模型,使定制变得乏味,有时甚至是不可能的。尽管这可以使您更容易理解任何给定的Maven构建,但是只要您没有任何特殊要求,它也将使其不适用于许多自动化问题。另一方面,Gradle的构建考虑了授权和负责任的用户。
二、性能
缩短构建时间是加快速度的最直接方法之一。Gradle和Maven都采用某种形式的并行项目构建和并行依赖项解析。最大的不同是Gradle避免重复和增量的机制。使Gradle比Maven快得多的前3个功能是:
- 增量性 -Gradle通过跟踪任务的输入和输出并仅运行必要的内容,并且仅处理可能发生的更改的文件来避免已经构建过的文件重新构建。
- Build Cache(构建缓存) —重用具有相同输入的任何其他Gradle构建的构建输出,包括在机器之间。
- Gradle Daemon —一个长期存在的过程,可将构建信息“热”存储在内存中。
在Gradle与Maven的性能对比中,这些和更多的性能特性使Gradle在几乎每种情况下的速度至少是其两倍(对于使用构建缓存的大型构建而言,则要快100倍)。
三、用户体验
Maven的任期较长,这意味着它对许多用户的IDE支持更好。但是,Gradle的IDE支持继续迅速提高。例如,Gradle现在具有基于Kotlin的DSL,可提供更好的IDE体验。Gradle团队正在与IDE制作者合作,以使编辑支持变得更好-随时关注更新。尽管IDE很重要,但是许多用户还是喜欢通过命令行界面执行构建操作。Gradle提供了一个现代的CLI,具有可发现性功能,例如“ gradle task”(渐变任务),以及改进的日志记录和命令行完成功能。最后,Gradle提供了一个基于Web的交互式UI来调试和优化构建:构建扫描。这些还可以在内部托管,以允许组织收集构建历史记录并进行趋势分析,比较构建以进行调试或优化构建时间。
四、依赖管理
两种构建系统都提供了内置功能,可以解决可配置存储库中的依赖项。两者都可以在本地缓存依赖项并并行下载它们。作为库使用者,Maven允许重写一个依赖项,但只能按版本。Gradle提供了可自定义的依赖关系选择和替换规则,这些规则可以声明一次,并在项目范围内处理不需要的依赖关系。这种替换机制使Gradle可以一起构建多个源项目以创建复合构建。Maven具有很少的内置依赖项作用域,Gradle允许自定义依赖项范围,它提供了更好的建模和更快的构建。
Maven依赖关系冲突解决方案的工作路径最短,这受声明顺序影响。Gradle可以完全解决冲突,选择图中最高版本的依赖项。另外,使用Gradle可以将版本严格声明为允许版本优先于可传递版本,从而降级依赖项。
作为库生产者,Gradle允许生产者声明“ api”和“ implementation”依赖项,以防止有害的库泄漏到使用者的类路径中。Maven允许发布者通过可选的依赖项提供元数据,但仅作为文档提供。Gradle完全支持功能变化和可选依赖项。
人生苦短,选择一个好的构建工具,节省时间,提升效率!