iT邦幫忙

2021 iThome 鐵人賽

DAY 2
2
Software Development

Gradle 通靈術系列 第 2

第二天:什麼是 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 開發者每天必用的生產力工具啊!

參考資料


上一篇
第一天:為什麼該學好 Gradle?
下一篇
第三天:Gradle 的 5 個重要觀念
系列文
Gradle 通靈術24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
Andy 安迪
iT邦新手 4 級 ‧ 2021-09-07 23:29:58

gradle clean assembleRelease 每次 release 的指令 XD

聖佑 iT邦新手 4 級 ‧ 2021-09-08 00:36:05 檢舉

結果再寫一個 task 來執行這兩個指令 (要懶就要懶到底 XD)

對誒~我學起來了

我要留言

立即登入留言