花了這麼多時間搞清楚 Gradle 的各種安裝方式,接下來就要開始學習使用 Gradle 指令。今天先來搞清楚初始化專案的指令 init
,也比對一下用 IntelliJ IDEA 建出來的專案跟從終端機用 Gradle 建立的有什麼不一樣?
我們後續會用 IntelliJ IDEA 來編輯程式碼,所以我建議把這些練習用的專案資料夾直接建立在 IDE 的 Workspace 下,也就是 ~/IdeaWorkspace
。在練習前別忘了先建立專案資料夾並把工作目錄切換過去:
$ cd ~/IdeaWorkspace
$ mkdir gradle-practice
$ cd gradle-practice
註:gradle-practice
是預想的專案名稱,您可以依照自己的喜好改成其他的名字。
gradle init
建立專案要使用 Gradle 來建立專案,在工作目錄呼叫 gradle init
指令即可:
$ gradle init
Starting a Gradle Daemon (subsequent builds will be faster)
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4]
互動問答的第一步會問專案類型,我們這邊先選 2: application
來產生一個應用程式專案。
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6]
問答的第二步會問專案要使用的程式語言,這邊請選 4: Kotlin
,後續都會以 Kotlin 為示範語言。
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
第三步問有沒有子專案?目前我們先保持單純,選 1: no
即可。
Select build script DSL:
1: Groovy
2: Kotlin
第四步問到 Gradle Build Script 要使用的 DSL 語言,當然還是選 2: Kotlin
囉!
Project name (default: gradle-practice):
第五步會讓我們設定專案的名稱,預設會用我們剛剛設定的資料夾名稱,後續若不滿意還可以改,所以先保持預設即可。
Source package (default: demo):
第六步的 Source package 也維持預設就好。
> Task :init
Get more help with your project: https://docs.gradle.org/7.2/samples/sample_building_kotlin_applications.html
BUILD SUCCESSFUL in 5m 9s
2 actionable tasks: 2 executed
完成以上步驟後,Gradle 就會將專案基本架構建立完成!您可以看到專案結構應該長得像這樣:
├── app
│ ├── build.gradle.kts
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── demo
│ │ │ └── App.kt
│ │ └── resources
│ └── test
│ ├── kotlin
│ │ └── demo
│ │ └── AppTest.kt
│ └── resources
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
在學習用 Gradle 指令前,筆者都是用 IntelliJ IDEA 建立專案的,實在很好奇這之間的差異在哪?在這邊也做個實驗紀錄一下。
首先用 JetBrains Toolbox App 開啟 IntelliJ IDEA,在歡迎畫面點選 New Project 建立新專案,IntelliJ IDEA 會在左邊列出一系列的專案樣板供選擇,請先選擇「Kotlin」。
接著在右邊自行設定喜歡的專案名稱及放置路徑。因為 Kotlin 可以做各式各樣的事情,所以 IntelliJ IDEA 也準備了一系列的 Kotlin 專案樣板供選擇,我們的案例比較單純,直接選 JVM 區段的 Application 即可。在 Build System 的部份,我會使用 Gradle Kotlin,意思是以 Kotlin DSL 寫 Gradle Script。Project SDK 可以選擇你在前面幾天安裝的 JDK 版本,或是像我一樣選擇 JDK 11。
在 Artifact Coordinates 的部份,可以依照你的需求設定 Group ID、Artifact ID 及 Version。我個人習慣將我自己的網址設定在 Group ID 上,不過做為練習的話,維持預設值也是沒關係的。全部都設定好後就按 Next 進到下一步。
在下一個畫面可以設定專案用到的 Module,以這個測試來說維持預設即可。旁邊的 Template 選擇 None,Test Framework 我們先暫時選 JUnit 5,Target JVM version 請選擇跟上一步一樣的 JDK 版本。
完成後按 Finish,IntelliJ IDEA 就會幫您把整個專案用內建的 Gradle 建立起來,專案結構會長得像這樣:
├── build.gradle.kts
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
└── src
├── main
│ ├── kotlin
│ └── resources
└── test
├── kotlin
└── resources
經過比對後,有 2 個地方不同:
app
資料夾底下,裡面會放對應的 src
及 build.gradle.kts
,在專案根目錄的 settings.gradle.kts
裡會將 app
資料夾以 include("app")
方式引入。gradle.properties
,目前紀錄著 Code Style 的設定。雖然今天示範 2 種建立專案的方式產生出來結構稍有不同,但可以看得出來在架構上大同小異,後續會再深入介紹其中設定值的作法及差別。接下來會先把重心放在了解 build.gradle.kts
裡的內容。
另外提醒一下,在這邊使用的 Gradle 是安裝到您本機的 Gradle,而不是 Gradle Wrapper 喔!這個情境就是我們前面提到唯一會使用本機 Gradle 的狀況。