前言
在 2014年,經友人推薦,我開始自學使用 Grails framework 作為 Java 開發 WEB 的平台架構。這一用,不得了了,我發現他真的很好用,比 Spring framework WEB/Spring Boot 好用太多。經過這些年來,跟 Spring framework WEB/Spring Boot 比較起來,我真的確認,跟 Spring framework WEB/Spring Boot比較起來,使用 Grails 開發 WEB,真的可以省去你很多時間,並且,程式碼要交接給別人時,也都很容易。但很奇怪,在台灣,使用 Grails 的人好像還比 RoR (Ruby on Rails)還少。因此,我很想要推薦 Grails 給大家使用。好,不多廢話,就開始吧。
簡略介紹
-
Grails,你可以簡單把他想成 Groovy + GORM 套件 建構在 (Spring Boot + Hibernate) 之上。是一個 WEB 全端的開發平台。因著 Groovy 關係,可以使用 Groovy 的強大與彈性的語法開發程式。因此,如果你羨慕 RoR 開發 WEB的便利性,也羨慕 Python 的簡潔語法,你真的要嘗試使用 Grails。相反地,如果你仍舊喜歡嚴格的物件宣告,那就是繼續留在 Spring Boot 也是不錯的選擇。
- 強調「慣例優於設定」(Convention over Configuration)。這句話是很有哲理的。這樣寫,你可能不太懂。沒關係,後續,你會看到很多實際的例子。
- 立即可用的開發環境。專案一旦建立好,無須任何設定,就可以立即使用、運行。
- Grails 4.0.4 以前(含 4.0.4) 是建構在 Groovy 2.5.6 之上,預設的 JDK 是 1.8。但也可以在 JDK11 中運行,但是會出現一些不礙事的警告
- Grails 5.0.0 開始,是建構在 Groovy 3.0.7 之上,預設的 JDK 是 11。
- 語法 99% 跟 Java 相容,並可直接使用現行所有的 Java 套件。
- 自動注入 (真的是自動,無須加上任何 annotation)
- Mixin 動態方法自動生成。
- 對於大部分的 RDBMS,以及 NoSQL (ex: Cassandra, Neo4J, MongoDB)都完全整合在其 GORM 架構中。
- 所有的物件分類,都按既定的 folder 擺放,這樣,日後接手維護的人,很容易就會知道你的 Controller、Service、Entity、Utilities (Helpers)、Views放在哪裡。
- 插件(Plug-ins)架構。Grails 提供一個完善的插件架構,所以當你要使用一個外在套件時(例如 Quartz),如果 Quartz 有提供 Grails 的插件,那你只需要把他加入到 build.gradle 中,就可以立馬方便使用。並且,現在 Grails 的套件也很豐富,請參考 https://plugins.grails.org/。插件架構對我們在面臨多系統共用同一個資料庫時,會有很大的幫助,這部分留在日後說明。
-
Grails 採用類似 RoR 的概念,並且,有一些規範,例如 Controller 物件一定要放在 controller folder 裡、Service 則必須要放在 service folder 裡、資料庫的 Entity 物件,則需要固定放在 domain folder 裡。因此:
- 在 controller folder 裡的物件,Grails 都固定會當作 Controller 物件處理。你就不需要再加任何 annotation。
- 在 domain folder 裡的物件,就都會被當作 Entity 物件,並且,你也不需要用一堆 annotation,你僅需要做簡單的 Groovy DSL 語法設定(後續文章會做說明)
安裝
安裝 Grails framework 的方式有兩種:
-
連到 https://grails.org/ 去下載回來後,直接解壓縮到你喜歡的 folder。
- 這個方法雖然簡單,但是日後當你有多個 Grails 版本要管理的時候,就會不好用。
- 但是對於不想要使用 cygwin/bash terminal 的用戶,你也只有這個方法了。
-
使用 sdkman 安裝 Grails (這是比較實用、且很好管理多個版本的方法):
- 若你是 Windows 的用戶,你必須安裝 cygwin,並且在 cygwin terminal 裡面安裝 sdkman。
1.有關 cygwin 的安裝,請參考 Cygwin安裝及SSH設定教學(上)
- 有關 sdkman 的介紹,可以先參考這篇 安裝/管理多個版本的 JDK
- 安裝好 sdkman 後,開啟一個 terminal,在 terminal 中輸入下列指令:
sdk install grails 5.0.0
-
安裝好後,我們測試一下是否有安裝正確。在 Terminal 視窗中,輸入
grails -v
開發環境 (IDE)
- 就目前我所知道的,可支援 Grails 的 IDE 有:
- IntelliJ-IDEA, 他支援度應該是最好的。我從 2014 年就開始使用,不論在速度、穩定度,都是非常棒的。並且 IntelliJ-IDE 對於 Groovy、Gradle 支援度也很高。
- NetBeans,他宣稱有完整支援 Grails/Groovy,但我沒用過 NetBeans,所以無法評論。
- Eclipse,不支援。也許你 Google 時,會發現 Eclipse 的套件 Spring Tool Suite 也有支援 Grails,但是那只有支援到 Grails 2.4。 Grails 2.5 之後,就會有問題。
- Visual Studio Code 目前沒有支援 Grails,僅能依靠 Groovy 套件,勉強支援 Groovy 語法。
- (非廣告時間)可以的話,我建議還是使用 IntelliJ-IDEA。IntelliJ-IDEA的處理速度比Eclipse 快很多。但是 IntelliJ-IDEA 與 Eclipse 在使用的觀念上有些不同:
- Eclipse 是以一個 Work space 為概念,一次可以同時編輯多個專案,但是 IntelliJ-IDEA 一次只能編輯一個專案。
- IntelliJ-IDEA 也可以讀取 Eclipse 的專案結構。因此如果你的工作就是在用 Java 開發程式的話,IntelliJ-IDEA 會是更好的選擇。
- Eclipse 我個人認為很不穩定。常常更新之後,一些 components 就壞了。要想辦法找出哪裡衝突。IntelliJ-IDEA 沒這困擾。