雖然我們或多或少聽過 Gradle 這個名字,但其實在學習 Kotlin 程式語言時,好像沒什麼機會聽到或用到它?所以我們就花一天的篇幅來談談,到底什麼是 Gradle?它的功能是什麼?以及為什麼需要它?
眾所皆知 Kotlin 是一個編譯語言,也就說當寫好 .kt
的原始碼後,還需要透過 Kotlin Compiler 編譯後才能運行。每當更新原始碼後,就得重新編譯一次,而這個簡單的流程在軟體開發的過程中會重複無數次。所以很明顯的,我們想要讓它自動化!
所以 Gradle 的第一個重要功能,就是協助我們建置專案。每當程式碼寫到一個段落想要運行起來看看時,就可以透過 Gradle 將所有的程式碼丟給編譯器進行編譯,並在編譯完成後直接執行起來看結果。原本這個流程需要自己在終端機裡打數個指令才能完成,有了 Gradle 後,只需要組合幾個語義明確的指令如 gradle claen
、gradle build
、gradle run
指令就可以迅速完成,而不用強背各種編譯指令參數、或是剪剪貼貼各種路徑,非常方便。若是搭配 IntelliJ IDEA,這些指令都被轉化成按鈕或選單,很多動作都可一鍵完成。
大家都不喜歡重造輪子,寫程式的時候能重複使用的程式碼就會想辦法抽取成共用的函式或類別。而當跨專案時,就會儘量利用別人寫好的函式庫,可以大大提升我們的開發效率,降低開發難度。不過,若是手動地管理這些使用到的第三方函式庫,就得自己去下載正確的版本到專案內,還得知道這些函式庫又相依哪些函式庫,當專案體積和複雜度日漸成長後,這項工作就會變得非常吃重。
好在 JVM 生態系裡已經有一個函式庫的中央集散地叫 Maven Central,大多數的函式庫作者都會把自己的專案發佈到這裡,而 Gradle 可以從上面取得所有函式庫的相依資訊及下載位置。Gradle 會依照專案內定義的相依套件,一個一個將其下載回來外,還會在編譯的時候一併將他們載入。
開發一個專案的需求還不止這些,除了編譯外,我們還需要執行靜態分析、程式碼撰寫風格檢查/修正、各種測試、甚至產生 API 文件,而很多時候專案還會有一些需要客製化的行為。以上這些需要重複執行的任務,大多在 Gradle 裡都有對應的指令可以使用,或是已經有外掛(Plugin)可以載入。若不幸沒有,還可以自行用 Kotlin 寫成一個 Gradle Task 來重複執行。Gradle Task 的設計,大大提升了其擴充性,各種情境幾乎都可以用 Gradle 來解決。
簡單來說,Gradle 是一個自動建置工具,它可以幫我們建置專案、管理相依及執行各種任務。對於開發者來說,它可以封裝所有建置工作的複雜細節、減少手動執行指令的時間、提高整體工作效率。也難怪 Gradle 會成為每個 JVM 開發者每天必用的生產力工具啊!
gradle clean assembleRelease 每次 release 的指令 XD
結果再寫一個 task 來執行這兩個指令 (要懶就要懶到底 XD)
對誒~我學起來了