第二天:什麽是 Gradle?以及为什麽需要它?

虽然我们或多或少听过 Gradle 这个名字,但其实在学习 Kotlin 程序语言时,好像没什麽机会听到或用到它?所以我们就花一天的篇幅来谈谈,到底什麽是 Gradle?它的功能是什麽?以及为什麽需要它?

编译式语言专案的三个基本需求

众所皆知 Kotlin 是一个编译语言,也就说当写好 .kt 的原始码後,还需要透过 Kotlin Compiler 编译後才能运行。每当更新原始码後,就得重新编译一次,而这个简单的流程在软件开发的过程中会重复无数次。所以很明显的,我们想要让它自动化!

自动建置(Build)

所以 Gradle 的第一个重要功能,就是协助我们建置专案。每当程序码写到一个段落想要运行起来看看时,就可以透过 Gradle 将所有的程序码丢给编译器进行编译,并在编译完成後直接执行起来看结果。原本这个流程需要自己在终端机里打数个指令才能完成,有了 Gradle 後,只需要组合几个语义明确的指令如 gradle claengradle buildgradle run 指令就可以迅速完成,而不用强背各种编译指令参数、或是剪剪贴贴各种路径,非常方便。若是搭配 IntelliJ IDEA,这些指令都被转化成按钮或选单,很多动作都可一键完成。

相依管理(Dependency Management)

大家都不喜欢重造轮子,写程序的时候能重复使用的程序码就会想办法抽取成共用的函式或类别。而当跨专案时,就会尽量利用别人写好的函式库,可以大大提升我们的开发效率,降低开发难度。不过,若是手动地管理这些使用到的第三方函式库,就得自己去下载正确的版本到专案内,还得知道这些函式库又相依哪些函式库,当专案体积和复杂度日渐成长後,这项工作就会变得非常吃重。

好在 JVM 生态系里已经有一个函式库的中央集散地叫 Maven Central,大多数的函式库作者都会把自己的专案发布到这里,而 Gradle 可以从上面取得所有函式库的相依资讯及下载位置。Gradle 会依照专案内定义的相依套件,一个一个将其下载回来外,还会在编译的时候一并将他们载入。

客制化任务(Task)

开发一个专案的需求还不止这些,除了编译外,我们还需要执行静态分析、程序码撰写风格检查/修正、各种测试、甚至产生 API 文件,而很多时候专案还会有一些需要客制化的行为。以上这些需要重复执行的任务,大多在 Gradle 里都有对应的指令可以使用,或是已经有外挂(Plugin)可以载入。若不幸没有,还可以自行用 Kotlin 写成一个 Gradle Task 来重复执行。Gradle Task 的设计,大大提升了其扩充性,各种情境几乎都可以用 Gradle 来解决。

小结

简单来说,Gradle 是一个自动建置工具,它可以帮我们建置专案、管理相依及执行各种任务。对於开发者来说,它可以封装所有建置工作的复杂细节、减少手动执行指令的时间、提高整体工作效率。也难怪 Gradle 会成为每个 JVM 开发者每天必用的生产力工具啊!

参考资料


<<:  【LeetCode】刷题技巧心得及资源

>>:  [Day 2] 总而言之把前置作业全解决

ESP32_DAY8 开发好夥伴-面包板

今天来介绍一下开发之路上的好夥伴之一-面包板!! 先来清点我手上工具箱 我知道大家手上不见得有这些...

Day 47 (Node.js)

1.use static or Router express.static =>Web 服务器...

自动化 End-End 测试 Nightwatch.js 之踩雷笔记:点击物件

点击特定物件是 E2E 中很常会做到的事,如果本身物件有设定好特定的 ID, Class 或 Att...

day18: pure function

今天我们提到 pure function,那相对的也会有, not a pure function,...