离线下载
PDF版 ePub版

阿拉神农 · 更新于 2018-11-28 11:00:43

闲言构建

构建,叫 build 也好,叫 make 也行。反正就是根据输入信息然后干一堆事情,最后得到几个产出物(Artifact)。

最最简单的构建工具就是 make 了。make 就是根据 Makefile 文件中写的规则,执行对应的命令,然后得到目标产物。

日常生活中,和构建最类似的一个场景就是做菜。输入各种食材,然后按固定的工序,最后得到一盘菜。当然,做同样一道菜,由于需求不同,做出来的东西也不尽相同。比如,宫保鸡丁这道菜,回民要求不能放大油、口淡的要求少放盐和各种油、辣不怕的男女汉子们可以要求多放辣子....总之,做菜包含固定的工序,但是对于不同条件或需求,需要做不同的处理。

在 Gradle 爆红之前,常用的构建工具是 ANT,然后又进化到 Maven。ANT 和 Maven 这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有一些缺点,所以让更懒得人觉得不是那么方便。比如,Maven 编译规则是用 XML 来编写的。XML 虽然通俗易懂,但是很难在 xml 中描述 if{某条件成立,编译某文件}/else{编译其他文件}这样有不同条件的任务。

怎么解决?怎么解决好?对程序员而言,自然是编程解决,但是有几个小要求:

  • 这种“编程”不要搞得和程序员理解的编程那样复杂。寥寥几笔,轻轻松松把要做的事情描述出来就最好不过。所以,Gradle 选择了 Groovy。Groovy 基于 Java 并拓展了 Java。 Java 程序员可以无缝切换到使用 Groovy 开发程序。Groovy 说白了就是把写 Java 程序变得像写脚本一样简单。写完就可以执行,Groovy 内部会将其编译成 Java class 然后启动虚拟机来执行。当然,这些底层的渣活不需要你管。

  • 除了可以用很灵活的语言来写构建规则外,Gradle 另外一个特点就是它是一种 DSL,即 Domain Specific Language,领域相关语言。什么是 DSL,说白了它是某个行业中的行话。还是不明白?徐克导演得《智取威虎山》中就有很典型的 DSL 使用描述,比如:

土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)  

杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。(找同行)  

杨子荣:拜见三爷!  

土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)  

杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)  

土匪:野鸡闷头钻,哪能上天王山!(你不是正牌的。)  

杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)  

Gradle 中也有类似的行话,比如 sourceSets 代表源文件的集合等.....太多了,记不住。以后我们都会接触到这些行话。那么,对使用者而言,这些行话的好处是什么呢?这就是:

一句行话可以包含很多意思,而且在这个行当里的人一听就懂,不用解释。另外,基于行话,我们甚至可以建立一个模板,使用者只要往这个模板里填必须要填的内容,Gradle 就可以非常漂亮得完成工作,得到想要的东西。

这就和现在的智能炒菜机器似的,只要选择菜谱,把食材准备好,剩下的事情就不用你操心了。吃货们对这种做菜方式肯定是以反感为主,太没有特色了。但是程序员对 Gradle 类似做法却热烈拥抱。

到此,大家应该明白要真正学会 Gradle 恐怕是离不开下面两个基础知识:

  • Groovy,由于它基于 Java,所以我们仅介绍 Java 之外的东西。了解 Groovy 语言是掌握 Gradle 的基础。

  • Gradle 作为一个工具,它的行话和它“为人处事”的原则。
上一篇: 题外话 下一篇: Groovy 开发环境