第一天:为什麽该学好 Gradle?

开始接触 Gradle 的原因

身为一位 Kotlin 开发者,每天需要接触的就是 JVM 生态系的工具。相依管理一直是各个程序语言都得处理的基本需求,而建置工具更是 Java、Kotlin 这类编译式语言不能少的面包与奶油(Bread and Butter)*。在 JVM 生态系里,相对比较多人使用的建置工具有 Gradle、Maven、sbt…等。

不过自从 Google 的 Android 团队选择 Kotlin 及 Gradle 这个组合,而 Kotlin 团队也针对 Gradle 推出 Kotlin DSL 的写作风格後,许多 Kotlin 开发者(包括後端)都开始转而使用 Gradle 做为他们的建置工具。

笔者开始接触 JVM 生态系的时间相对较晚,对过往的工具已难恭逢其盛。因此在一开始学习 Kotlin 时,就决定使用 Gradle 做为主要的建置及相依管理工具。不仅可以满足自己在後端开发的需求、同时也能将经验延伸到 Mobile 开发上。

Gradle 的入手难度

Gradle 很棒!至少看别人使用起来好像都很顺,但自己使用时却完全不是这麽一回事。我原本以为这是因为接触时间不长导致,但问过身边开发圈的朋友後发现,原来我不孤单,不少开发者都跟我一样挣扎於 Gradle 的入手难度。

Gradle 真的有这麽难吗?我觉得这是因为 2 个原因:

  1. 太过强大:虽然 Gradle 的原始目的是一个建置工具,但 JVM 生态系对建置工具的需求不仅止於此,从相依管理、各式自动化指令以及为了共享而有的外挂系统,再再提高了 Gradle 的复杂度。

  2. 使用 Groovy 语言:Gradle 是用 Groovy 实作的。虽然 Groovy 程序语言也是 JVM 家族的一员,但毕竟不是主流大众熟悉的语言。对於一位 JVM 开发者来说,除了要熟悉自己专案使用的语言外,还要多接触一个相对陌生的语言,无疑又再次垫高了 Gradle 的入门门槛。

令人羞耻的坏习惯

虽然我们都知道把生产力工具摸熟、摸透的重要性,但往往就败在短缺的时间及人类的惰性。

所以即便我知道应该花时间把 Gradle 官方文件好好翻一遍,把所有设定、指令都搞清楚,但往往屈服於时间压力及惰性,最後都是在 Google 或上 StackOverflow 找别人的答案胡乱贴一把,出错了就再换一个答案直到可以解决问题为止。

其实内心非常清楚,与其花时间找「可能的答案」,这种重覆试误所花掉的时间,累积起来其实都足够自己好好把 Gradle 说明书看完一遍。在深切的反省之後,我问自己,还要用这种「瞎子摸象」的方式多久?

不,我想做出改变!

我想好好把 Gradle 搞清楚,就算我不见得能 100% 搞懂 Gradle 底层原理的实作细节,但至少 build.gradle.kts 里的每一行我要清楚知道它的作用,当别人请我解释时,我要言之有物。

你迟早要把 Gradle 搞清楚的,为什麽不现在就做呢?

如同爱因斯坦所言:「假如你不能用很简单的方式来阐述一个观念,那表示你并不是真的理解这门知识。」抱持着相同的理念,我觉得一边学习一边就把刚学习到的知识整理并教给别人,是一个让自己快速成长的捷径。

在这 30 天的铁人赛里,我将从一个新手小白的观点出发,从 Gradle 在 JVM 建置工具里的角色、环境及安装设定、常用指令等基础开始,接着会以几个常见的实务情境为范例,实际使用 Gradle 来完成任务,以及如何客制 Gradle Task,让 Gradle 可以帮我们做更多琐碎的小事。最後,也会讨论扩充 Gradle 的方式及 Plugin 架构。期望透过 30 天的努力不懈,重新把 Gradle 学好。

希望大家在看完这个系列文後,可以抬着头跟别人说:「Gradle 我也略懂略懂(挑眉)」。

笔者注

  • 「Bread and butter(面包与奶油)」在英文的意思里指的是每日不能少的生活需求。

<<:  【Day6】窗涵式,n_fft ,hop_length 到底什麽意思啊?

>>:  Rails 如何新增 Migration 档案

Fit Leather Jackets

We are making your quest for VIP coats simpler by ...

问责制,审计和审计追踪(Accountability, Auditing, and Audit Trail)

审核跟踪通常被视为侦查控件。查看审核跟踪可以发现或发现入侵或不合规的活动。 根据ISO 14641:...

[iT铁人赛Day22]练习题(1)

昨天教到如何下载以及使用疯狂程设,今天就来试着做一题练习题吧。 登入疯狂程设,点选CPE考古题就会出...

Get Amazon TV Fire Stick Support To Fix Issues

Amazon TV Fire Stick is the portable entertain dev...

Re-architect - Domain Layer (一)

上一天我们提到了 Domain Layer 会包含以下三个组件:CoEditor, ContextM...