Gradle与Maven比较

以下从灵活性性能用户体验依赖管理几个方面对Gradle和Maven进行比较,更多详细内容可以访问Gradle功能列表Gradle与Maven的性能对比

gradle-vs-maven

该图展示了分别使用Gradle和Maven构建Apache Commons Lang library的情况,可以查看这里了解Gradle的构建详情。

灵活性

谷歌选择Gradle作为Android官方构建工具,不是因为它的构建脚本是groovy代码,而是因为Gradle是以一种最基本的可扩展的方式建模的。Gradle的模型还允许使用C/C++进行本地开发,并且可以扩展到其他生态系统,例如,Gradle的设计考虑了使用它的Tooling API进行嵌入。

Gradle和Maven都提供了约定优于配置的概念,然而,Maven提供了一个非常严格的模型,使得定制变得乏味,有时甚至变得不可能,尽管这让你更容易理解任何给定的构建,但只要你没有任何特别的要求,它也不适合处理许多自动化问题。另一方面,Gradle是在充分授权和负责任的用户基础上构建的。

性能

image.png

减少构建时间是加快交付速度最直接的方式之一。Gradle和Maven都采用某种形式的并行项目构建和依赖解析,最大的区别在于Gradle的工作回避与增量机制。Gradle比Maven快的最主要的三个特性:

  • 增量工作方式。Gradle通过跟踪任务的输入输出来避免不必要的工作,并且只处理可能被更改的文件;
  • 构建缓存。对于具有相同输入的构建,可以复用其他构建的输出,即使是在不同的机器上;
  • Gradle的守护进程。在内存中长期驻守一个进程来保持热点构建信息。
    Gradle与Maven的性能对比中,以上这些以及其他一些特性使得Gradle几乎在每个场景中都性能都要高一倍,对于使用的构建缓存的大型构建,性能甚至要高100倍。

用户体验

image.png

Maven由于对IDE的友好支持,使得其在用户中有广泛的使用。但是,Gradle也在不断完善对各种IDE的支持,例如,Gradle有基于Kotlin的DSL,提供了更好的IDE体验。Gradle团队正在与IDE开发商合作,以提供更好的编辑支持,请关注这里

尽管IDE很重要,仍然有很多用户喜欢使用命令行来构建,Gradle提供了一个现代的命令行工具,它具有可发现功能,如‘gradle tasks’,以及改进的日志记录和命令补全功能。

最后,Gradle提供了一个可交互的web UI(build scans),用于调试和优化构建。这些也可以在内部托管,以允许团队收集构建历史,分析构建趋势,比较构建进行调试和优化构建时间。

image.png

依赖管理

Gradle和Maven都内建了从配置仓库解析依赖关系的功能,都能将依赖项缓存到本地并且可以并行下载。

作为库消费者,Maven允许覆盖依赖项,但只能根据依赖项的版本来覆盖。Gradle提供了可自定义的选择和替换规则,这意味着,我们在项目中只需要声明一次就可以全局排除不想要的依赖项,这种机制使得Gradle可以完成包含多个项目的复合构建。

Maven几乎没有内置的依赖范围管理,这使得在测试或生成代码等常见场景中的模块结构不够友好,比如,单元测试和继承测试之间没有分离。Gradle支持自定义依赖范围,这提供了更好的模块结构和更快的构建。

作为库生产者,Gradle允许生产者声明“api”和“implementation”之间的依赖关系,以避免不需要的库泄漏到消费者的classpath中。Maven则是允许发布者通过可选的依赖项提供元数据。

下一步做什么

建议进一步了解Gradle的功能,或者从以下这些主题开始:

原文链接
https://gradle.org/maven-vs-gradle/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,233评论 8 72
  • 原文地址 作为Android开发你必须明白的Gradle基础 作为一个Android开发程序员,如果你的build...
    Android_冯星阅读 722评论 0 1
  • 构建工具的诞生帮我们省去了不少的事情,随着Maven的出现,确实使我们眼前一亮,maven优化了上一代ant的复杂...
    Tim在路上阅读 961评论 0 0
  • ……深夜不寐,手不释卷。深邃的眼神,深情的追问,深广的关怀,“无穷的远方,无数的人们”,与我息息相关。这...
    教育谭阅读 341评论 0 3
  • 你迄今为止最接近死亡是在什么时候?我不知道你的答案,当我看到爷爷的眼睛散尽最后一丝光芒的时候,我知道,这就是我目前...
    优雅s阅读 379评论 0 4