和微軟(.Net)程式人員習慣的「一條龍」式解決方案不同,Java程式人員在挑選開發工具時的常是各吹各的調,誰叫開源碼(OpenSource)的小天地中多的是免費又功能強大的「整合開發環境」(Integrated Development Environment)。說句玩笑話,想要組織一群Java工程師來開發專案,第一件事是得敲定大家應該用哪個開發工具。開發工具的挑選,如果再加上「自動化建置工具」(build automation tool)來攪局,開發團隊肯定難有共識。而Gradle便是新一代的自動化建置工具,時常出現在Android手機程式和Java技術書籍的範例程式。
如下圖所示,在打造軟體專案的過程中,整合開發環境和自動化建置工具都可以用來執行同樣的步驟(例如:編譯程式),兩種工具能相互取代。

「我現在用IDE寫程式好好地,為何要改用Maven來做IDE能辨到的步驟?」便是我在學Maven(另一套知名的自動化建置工具)時心中的困惑。在研讀「實戰Gradle」之後,對此問題的答案逐漸清晰,採用自動化建置工具最主要的目的就是實踐「持續整合/持續佈署(Continuous Integration/Continuous Deployment)」。像Maven、Gradle的自動化建置工具,能直接用命令(Command)模式執行,如此一來才能輕易地與Jenkins這類CI/CD工具整合,讓軟體開發的各步驟都能規劃出標準作業程序(SOP)並隨之自動化,減少因人為疏失造成的錯誤。
身為Java程式開發人員,有時心中不免嘀咕,每隔幾年總有新工具和新框架橫空出世,對相同的問題提出不同的解法,學起來真的折騰人。像是自動化建置,從最早的Ant、中期的Maven到本書提到的Gradle就有三種。工具的設計思維從完全靠自己(Ant),進化為約定優先於設定(Maven),最後變成約定與開放兼容(Gradle)。Gradle勝過Maven的地方在於兩者雖然都是採用預先定義好的規則並透過各種插件(Plugin)來滿足各式建置需求,但開發者可以在Gradle中使用Groovy語言來程式化建置邏輯,能完成諸如if(條件判斷)、for(迴圈)等高度複雜的建置情境。「豐儉由人」是Gradle踏在Maven肩膀上悟出的心得,也會是開發者投入Gradle懷抱的最大原因。
「實戰Gradle」是一本讓讀者獲得Gradle入門到進階功力的速成寶典,透過一個相當真實的範例專案,帶領我們一步步完成各種自動化項目。作者不單單介紹程式專案的編譯、打包和佈署等必要步驟,在自動化的議題上更引導我們走向測試導向開發(Test-Driven Development)、持續整合/持續佈署(CI/CD)等成熟的軟體工程應用方案。本書以Gradle工具做核心,向外提到的延伸工具相當多(例如:JUnit、Jenkins、Ansible等),讀者想要透曉所有工具軟體細節會有一定門檻,必須視自己情況選擇性閱讀。最後不得不警告,「理想很美好,現實很骨感」雖然上述的分享把此書說成像本軟體工程知識的Gradle速成寶典,但事實上這書提到的工具軟體版本都已經過時,在閱讀時要不斷地自行考證和更新程式碼的內容,簡直像幫出版社進行新版本的校訂工作,值不值得就看你是否願意花時間練功了。