美文网首页
2018-05-29 Gradle 其所以然

2018-05-29 Gradle 其所以然

作者: 袁旭程 | 来源:发表于2018-05-30 01:58 被阅读0次

1 序言

Gradle现在基本已经是jvm构建世界里的头一把交椅了, 像Spring,Android都是首推gradle编译的。同时,gradle也和它的前辈们一样,跨越了更多的语言的边界,成为了一个通用的构建工具。 这篇文章主要通过侃大山的方式,聊一聊Gradle的前辈ant和maven,对比前辈和gradle的区别,gradle为何更加优秀。同时也会谈到远古的make, 还有js世界的webpack,做一个横向的对比。

2 Gradle 的出生

Gradle的第一个Release是在2007年。创始人Hans Dockter, 在聊到他创建gradle的目标,是创建一个高效地,自动化地,适合大型企业的构建工具【1】。 他设定了一个非常高的目标,将不可能的事情,变成可能。有很多pain point,Hans提出很多pain point,并且表示Gradle的目标就是解决这些问题。 更近一步,gradle是有一个企业在背后提供服务的,这意味着,作为一个开源项目,这个项目可以得到更高的更加积极的维护,这是一个非常聪明的做法。Community和公司双核驱动,能够更加积极地推进项目的进展。

在进一步介绍 gradle 解决的pain point之前,先请出几位前辈的介绍

3 远古的 Make

Make不算是最早的有依赖管理的自动化构建工具,但是一定是早期传播最广的构建工具。依附着Unix的传播,让make在一段时间成为构建工具的代名词。Make的构建非常方便,非常自由,就像写shell脚本一样。

4 中古的 Ant

Ant是早期被广泛使用的java项目构建工具,第一个release是在2000年【2】, 脱胎于tomcat项目。 Ant的主要目标是替代早期Unix系统中的Make工具。 Make在一段时间内是Java的构建解决方案,Just like C++。 但是时代在发展, 更多地语言出现了,更多地操作系统出现了, 更多的平台出现了。JVM作为一个跨平台的解决方案,一个跨平台的构建解决方案也是势在必行。 Ant在这个时机,作为一个Make的jvm版本继任者,华丽地登场了。make 使用自己的makefile,并且自定义的DSL来处理依赖关系。makefile非常灵活,但是也带来了unix风格的阅读障碍(站在历史发展的角度看,只是语法过时了而已)。为了解决这个问题,Ant使用了当时非常火的XML来描述makefile, build.xml。 个人的看法,ant很好地翻译了makefile,但是没有在构建工具理念的本身上,往前推进。

5 近代的maven

随着Java项目越来越庞杂,开源框架不断增加,如何管理一个大型项目变成了一个技术活。 Java有自己的包管理方案,但是代码框架总是在不断演进,并且在越来越复杂。 对于个人开发者来说,为了完成一个tiny project,需要理解数个大型项目的构建,同时进行版本管理,这根本说不过去。

Ant还有一个问题,就是太灵活了。 它和Make一样,能够让用户办到几乎所有的事情。但是,过于灵活的代价,就是在很多方面,过于简单。比如如何进行版本管理,构建时候的缓存应该如何处理等等。

Maven 1, 在2004年发布,目标就是更好地,更加有章法地来管理项目。解决痛点,是标准化构建的架构。Ant在maven出现后,使用Ivy来进行版本管理,一度搬回一城。不过,很快,在2005年,maven完成了类似lvy的功能来管理不同模块的不同版本。

Maven也是使用xml来描述构建

6 DSL Groovy的诞生

Groovy的第一个版本诞生于2007年(从2003开始提出)。并且诞生了使用groovy来解决xml阅读困难的ant插件,Gant。Groovy是一门动态语言, 抛弃了繁琐的类声明和类型声明,是一门可以解放java程序员的DSL。 Gant把创建构建步骤变成了定义一个构建函数,这是语义进步的一小步,但是是构建工具的一大步。

7 现代的 Gradle

介绍完上面的工具之后,回到Gradle的出现。 创始人Hans,有一个非常大胆的想法,把所有构建工具的优点都集合起来。 解决掉它们的问题,做一个超级超级强大的构建工具

Gradle的特点
  • gradle is groovy
  • flexible conventions
  • Robust and powerful dependency panagment
  • Scalable builds
  • Effortless extendibility
  • Community-driven and company-backed
  • Integration with other build tools
  • Expressive build langage and deep API
Gradle的优点
  • build.gradle 文件远小于Ant和maven的构建文件
  • Gradle 比 maven 更加包容 ( 更方便地自定义打包流程,和项目结构 )
  • Gradle有默认地打包方案,但是同时提供非常方便地自定义功能 ( compile, classes, jar, assemble, build )
  • 更高地cache管理,让打包更加高效
  • Effortless extendibility - 允许使用task 自定义
  • Integration with other build tools - ant,maven
  • Continuous Delivery - 集成发布流程( 曾经这么做过,但是现代已经发生变化, 由Ci来触发)

8 当代的 webpack

  • 更加强大的 default 选项
  • 开发者友好地工具支持( dev-server/hot module replacement )
  • Mode Support

9 Conclusion

Gradle是一个非常强大的工具,充分汲取了前辈们的教训,是一款非常成功构建工具。不过近几年的变化不是特别明显。或许可以从其他语言的构建框架中汲取营养,来完成理念上的进一步进化。不管怎么说,现在它是java项目的构建工具第一选项


【1】Breaking Open: Gradle https://www.youtube.com/watch?v=XXoIzzcJr80
【2】Apache Ant wiki https://en.wikipedia.org/wiki/Apache_Ant
【3】History of Maven by Jason van Zyl https://maven.apache.org/background/history-of-maven.html


Make build tool https://www.gnu.org/software/make/
Ant build tool https://ant.apache.org/
Maven build tool https://maven.apache.org/
Gant build tool https://gant.github.io/
Gradle build tool https://gradle.org/
Webpack build tool https://webpack.js.org/


相关文章

  • 2018-05-29 Gradle 其所以然

    1 序言 Gradle现在基本已经是jvm构建世界里的头一把交椅了, 像Spring,Android都是首推gra...

  • 教师功力的三个境界

    1示其然 2示其所以然 3示其从来燃

  • cx_oracle + python 批量插入

    编辑时间2018-05-29 代码

  • 2017-10-13

    知其然,知其所以然,知其可为之然。

  • 2018-05-29

    2018-05-29 戴师傅简书作者 2018-05-29 20:04 打开App (稻盛哲学学习会)打卡第70天...

  • Loose Index Scan & Tight Ind

    2018-05-29 GROUP BY Optimization The most general way to ...

  • 2019-07-31

    2018-05-29 日常拍家里人。

  • gradle wrapper

    一直以来对gradle 一知半解的使用,特别是对于gradle wrapper,之前只知道其是对于gradle的包...

  • Gradle 基础知识

    本文将对Gradle的一些基本概念、用法进行总结,从而避免自己在Android开发过程中的“会而不知所以然”,关于...

  • 2018-05-29

    2018-05-29 #!/bin/bash echo -e "Please choose you menu: "...

网友评论

      本文标题:2018-05-29 Gradle 其所以然

      本文链接:https://www.haomeiwen.com/subject/lzmzjftx.html