<img height =" 1" width =" 1" style =" display:none" src =" https://www.facebook.com/tr?id=371406826709657&amp;ev=PageView&noscript=1">
发现适用于Java项目的新的不稳定测试缓解工具- 1月27日注册在线研讨会 close

Gradle vs Maven Comparison

下面总结了Gradle和Apache Maven之间的主要区别:灵活性,性能,用户体验和依赖管理. 这并不意味着要详尽无遗,但是您可以查看Gradle功能列表以及Gradle与Maven性能比较以了解更多信息.

此GIF显示了使用Maven和Gradle(无构建缓存)的Apache Commons Lang库的并行完整构建. 您可以在此处查看此构建构建扫描 .

Flexibility

Google选择Gradle作为Android官方构建工具 ; 不是因为构建脚本是代码,而是因为Gradle以最基本的方式可扩展的方式进行建模. Gradle的模型还允许将其用于C / C ++的本机开发,并且可以扩展为涵盖任何生态系统. 例如,Gradle在使用Tooling API时就考虑了嵌入.

Both Gradle and Maven provide convention over configuration. However, Maven provides a very rigid model that makes customization tedious and sometimes impossible. While this can make it easier to understand any given Maven build, as long as you don’t have any special requirements, it also makes it unsuitable for many automation problems. Gradle, on the other hand, is built with an empowered and responsible user in mind.

Performance

缩短构建时间是加快出货速度的最直接方法之一. Gradle和Maven都采用某种形式的并行项目构建和并行依赖项解析. 最大的差异是Gradle避免工作和增加工作量的机制. 使Gradle比Maven快得多的前3个功能是:

Gradle与Maven的性能对比中,这些和更多的性能特性使Gradle在几乎每种情况下的速度至少是其两倍(对于使用构建缓存的大型构建而言,则要快100倍).

User Experience

Gradle build script written with Kotlin in an IDE

Maven的任期较长,这意味着它对许多用户来说都更支持IDE. 但是,Gradle的IDE支持继续迅速提高. 例如,Gradle现在具有基于Kotlin的DSL ,可提供更好的IDE体验. Gradle团队正在与IDE开发商合作,以使编辑支持变得更好-随时关注更新.

尽管IDE很重要,但是许多用户还是喜欢通过命令行界面执行构建操作. Gradle提供了一个现代的CLI,具有可发现性功能,例如" gradle task"(渐变任务),以及改进的日志记录和命令行完成功能 .

最后,Gradle提供了一个基于Web的交互式UI来调试和优化构建: 构建扫描 . 这些也可以在内部托管,以允许组织收集构建历史记录并进行趋势分析,比较构建以进行调试或优化构建时间.

A Gradle build scan

Dependency Management

两种构建系统都提供了内置功能,可以解决来自可配置存储库的依赖关系. 两者都可以在本地缓存依赖项并并行下载它们.

作为库的使用者,Maven允许重写一个依赖项,但只能按版本. Gradle提供了可自定义的依赖关系选择替换规则 ,这些规则可以声明一次,并在项目范围内处理不需要的依赖关系. 这种替换机制使Gradle可以一起构建多个源项目以创建复合构建 .

Maven具有很少的内置依赖项作用域,这些作用域在常见的情况下(例如使用测试夹具或代码生成)迫使笨拙的模块体系结构. 例如,单元测试和集成测试之间没有分隔. Gradle允许自定义依赖项作用域 ,它提供了更好的建模和更快的构建.

Maven依赖关系冲突解决方案使用最短路径,这受声明顺序影响. Gradle可以完全解决冲突,选择图中最高版本的依赖项. 另外,使用Gradle可以将版本严格声明为允许版本优先于传递版本,从而降级依赖项 .

作为库生产者,Gradle允许生产者声明" api"和"实现"依赖项,以防止有害的库泄漏到使用者的类路径中. Maven允许发布者通过可选的依赖项提供元数据,但仅作为文档提供. Gradle完全支持功能变体和可选的依赖项 .

Next Steps

我们建议您更深入地了解Gradle的功能,或者从这些资源开始.

by  ICOPY.SITE