位元詩人 [Groovy] 程式設計教學:建置開發環境

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

在上一篇文章中,我們簡單地介紹了 Groovy,相信各位讀者都已經有一些想法,對於是否要將 Groovy 用於專案中有相當的信心。接著,在本篇文章中,我們會帶著各位讀者實際建置 Groovy 開發環境,做為日後撰寫 Groovy 程式的準備。

安裝 Java

由於 Groovy 運行在 Java 平台上,我們要先安裝 Java 平台。Java 平台分為 JRE (Java SE Runtime Environment) 和 JDK (Java SE Development Kit) 兩種,前者只能用來執行 Java 程式,但沒有開發工具,所以我們要安裝 JDK。

現在的 JDK 長期支援版本 (註) 是 17。沒有特殊理由的話,使用這個版本較佳。以目前的態勢來說,先試著在 OpenJDK 上運行 Java 和其他 Java 平台語言是較佳的選擇,必要時仍然可以回頭用 Oracle 版本的 JDK。

(註) LTS (Long-Term Support)。比一般版本有更長的支援週期,就不需要頻繁地更動軟體版本

Windows

傳統的方式就是下載 OpenJDK 17 安裝程式,按照步驟安裝即可,相信應該不會太困難。不過,筆者建議用 Chocolatey 這套套件管理軟體來安裝。Chocolatey 將 GNU/Linux 上的套件管理的概念帶到 Windows 來,使用指令就可以安裝許多軟體。

首先,以管理員權限開啟命令提示字元,輸入以下指令:

> @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

由於這行指令很長,建議將命令列指示符後的指令複製貼上,不要自行手動輸入。

接著,同樣在有管理員權限的終端機內,用 Chocolatey 安裝 OpenJDK:

> choco install openjdk

Unix

不論是 Mac 還是 GNU/Linux,在 Unix 上建議用 SDKMAN 管理 Java 相關軟體。透過 SDKMAN,可以在命令列安裝及管理數種 Java 平台語言、框架和工具,包括 Groovy 及 Gradle 在內。SDKMAN 以 Bash 寫成,僅依賴於一些類 Unix 系統的標準工具,使用上相當簡單。

安裝 SDKMAN:

$ curl -s "https://get.sdkman.io" | bash

SDKMAN 會自動修改 shell 設定檔,如果需要,也可自行手動修改。在 shell 設定檔加入以下內容:

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/Users/apple/.sdkman"
[[ -s "/Users/apple/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/apple/.sdkman/bin/sdkman-init.sh"

安裝 Groovy

Windows

傳統的方法,也是透過安裝程式來安裝,請讀者自行完成。不過,也可以用前述的 Chocolatey 安裝,會比較簡單:

> choco install groovy

Unix

承前文,用 SDKMAN 安裝 Groovy:

$ sdk install groovy

預設情形下,SDKMAN 會安裝最新穩定版本,應該可以符合大部分使用者的需求。

(選擇性) 安裝 Gradle

Gradle 是用來建 Groovy 專案 (註) 的編譯自動化軟體。剛學 Groovy 時不會馬上用到,但日後要建立有規模的 Groovy 程式時就會有用。

(註) 實際上可以建置多種語言的專案。包括但不限於 C++、Java、Groovy、Scala、Kotlin

Windows

用前述的 Chocolatey 安裝 Gradle:

> choco install gradle

Unix

承前文,用 SDKMAN 安裝 Gradle:

$ sdk install gradle

選擇編輯器

如果把 Groovy 當成類似於 PerlPythonRuby 的命令稿語言,使用 VS Code 這類編輯器即可,不一定要用正統的 Java IDE 來寫 Groovy 程式。

習慣使用 Java IDE 的讀者,可以從 NetBeansEclipseIntelliJ IDEA 中挑一個來用。目前來說,IntelliJ IDEA 的反應速度比較好,使用起來會比較順手。如果不想付費,可以先用 Community Edition。

檢查 Groovy 開發環境

在終端機輸入 groovy --version 指令:

> groovy --version
Groovy Version: 3.0.9 JVM: 17.0.1 Vendor: Homebrew OS: Mac OS X

如果有看到版本號,即是正確安裝;否則,要回頭檢查那個步驟錯誤。

透過本文的介紹,相信各位讀者都能順利建立開發環境。在下一篇文章中,我們將帶著讀者實際撰寫 Groovy 程式,並學習如何建立 Groovy 專案。

以 Gradle 建立 Groovy 專案

剛學 Groovy 時,我們只將 Groovy 程式寫在命令稿 (script) 中,對於簡單的檔案這樣子還沒什麼問題,但是,當程式規模變大,我們就希望以專案管理 Groovy 程式碼。目前有幾種管理專案的方式:

  • 透過特定 IDE 來建立專案,如 Eclipse 或 IntelliJ IDEA
  • 透過不限於特定 IDE 的編譯工具,如 Maven 或 Gradle

雖然說前者對初學者來說比較簡單,以長遠的角度來說,還是要學 Gradle 等編譯工具,因為要和別人合作時,大家不一定都用同一種 IDE;日後要分享程式碼時,也傾向將其轉為 Maven 或 Gradle 專案。

根據程式的性質,可以將 Groovy 專案分為應用程式 (application) 和函式庫 (library) 兩類。前者可直接在電腦內執行,以達成某些特定的功能;後者無法直接執行,而是預先寫好一些程式碼,將其包裝起來,待其他應用程式 (或函式庫) 來呼叫。

一開始練習時,我們撰寫的都是直接在終端機執行的應用程式,不會馬上撰寫函式庫。

以 Gradle 建立 Groovy 專案:

$ mkdir myapp
$ cd myapp
$ gradle init --type groovy-application

建立完專案後,試著執行該專案:

$ gradle run

> Task :run
Hello world.

BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date

第一次執行該指令時,會耗費比較久的時間,因為需要下載一些檔案,第二次以後再執行就會比較快。

tree 指令觀察一下專案結構:

$ tree
├── build/
├── build.gradle
├── gradle/
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── groovy
    │       └── App.groovy
    └── test
        └── groovy
            └── AppTest.groovy

專案內有數個檔案,說明如下:

  • build/ 資料夾:編譯出的內容,該資料夾內的內容不宜手動處理,可用 Gradle 指令清空
  • build.gradle:用來管理 Gradle 專案的主要命令稿
  • gradle/ 資料夾:僅是用來將 Gradle 附帶到專案中,不需手工處理
  • gradlew 和 gradle.bat:當系統上沒有 Gradle 時,可以用該命令稿代替,不需手工處理
  • setting.gradle:一些 Gradle 專案的設定
  • src/ 資料夾:實際撰寫程式碼的地方

通常,我們在將程式碼寫在 src/ 資料夾即可,僅在需要時去調整 build.gradle 和 setting.gradle 即可,其他的檔案和資料夾都不需更動。

加入 Fat JAR 支援

原先 Java 沒有模組的概念,後來出現 JAR 這種檔案格式,可用來代替模組。而 fat JAR 是指將所有相依的 JAR 重新打包在同一個 JAR 中,之後這個 JAR 就可以單獨使用。對於 Java 程式來說,fat JAR 很方便,只要將一個單一的 JAR 傳到另一台有裝 Java 平台的電腦,就可立即使用。

在我們前述的專案中,編譯出來的 JAR 不是 fat JAR。要透過外掛的功能才能編譯 fat JAR,所以我們要加入 shadow。在 build.gradle 的最上方加入以下敘述:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
    }
}

apply plugin: 'com.github.johnrengelman.shadow'

執行相關的任務:

$ gradle shadowJar

編譯成功後,執行此 JAR 檔案:

$ java -jar build/libs/myapp-all.jar
Hello World.

說實在的,Gradle 對初學者來說不太容易學習,尤其對完全不熟 Groovy 的使用者,要馬上自在地讀和寫 Gradle 命令稿也有一定難度。

如果讀者覺得 Gradle 過難,不妨暫時先以單純的 Groovy 命令稿或是以 IDE 所建立的專案為主,待學習 Groovy 一段時間後,再回頭學 Gradle 會比較容易上手。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。