目錄
- 一、什么是 Gradle?
- 二、為什么選擇 Gradle?
- 三、Gradle 的項目結構
- 3.1 項目結構
- 3.2 gradle wrapper 包裝器
- 3.3 settings.gradle 設置文件
- 3.4 build.gradle 核心構建文件
- 1)原始文件內容
- 2)plugins 插件
- 3)repositories:倉庫源
- 4)dependencies 依賴

大家都知道 Gradle 和 Maven 一樣,是一個項目的構建工具。它通過任務來控制開發的進程,這些任務包括:編譯、打包、測試、部署 和 發布 等。Gradle 誕生于 2008 年,僅僅比 Maven 晚 4 年。Android 也采用 Gradle 作為默認的構建工具。
本文希望通過以下的講述,幫助你快速輕松的使用 Gradle 加速您的 Spring Boot 開發應用。
一、什么是 Gradle?
Gradle
是一款基于 Apache Ant 和 Maven 概念的現代化構建工具,它結合了前兩者的優點,同時引入了基于 Groovy(現也支持 Kitlin)的領域特定語言(DSL),使得構建腳本更加簡潔靈活。
二、為什么選擇 Gradle?
2012年開始,Spring 框架已全部使用 Gradle 來構建;2020年開始,Spring Boot 也全部采用 Gradle 來構建。官方使用 Gradle 的主要原因還是 “構建項目花費更少的時間”。(可參考:Spring/Spring Boot編譯工具從Maven遷移到了Gradle)


但對于我們普通的應用開發來說,Gradle 對于我們的優勢在于:更簡潔的代碼和更豐富的功能。(可參考:Gradle大戰Maven,勝負已分?)

最近的一些統計報告,越來越顯示出 Gradle 有越來越多的人在使用它。
- stackoverflow 的趨勢報告:

- OpenLogic 發布的《2022年度開源報告》

Spring 官方生成應用程序的網站:spring initializer(https://start.spring.io/),也已將默認的構建工具從 Maven 切換到了 Gradle。
綜合上述種種,小編覺得有必要了解一下快速易用的 Gradle 了。
三、Gradle 的項目結構
3.1 項目結構
打開 https://start.spring.io/,生成演示項目,項目的結構如下所示:
springboot-grade
:Spring Boot 項目的根目錄,基于 Gradle 構建。grade/wrapper/
:Gradle 包裝器,是 Gradle 提供的一個輕量級腳本工具,用于在不預先安裝 Gradle 的情況下運行 Gradle 構建任務。grade-wrapper.jar
:Gradle Wrapper 的可執行 JAR 文件。grade-wrapper.properties
:配置 Wrapper 使用的 Gradle 版本等信息。
src/
:項目源代碼目錄(未展開具體內容)。.gitignore
- Git 忽略規則文件。build.gradle
- 項目構建腳本。gradlew
/gradlew.bat
- Gradle Wrapper 啟動腳本(Unix/Windows)。settings.gradle
- 定義項目模塊和名稱。
3.2 gradle wrapper 包裝器
Gradle Wrapper
是 Gradle 包裝器,是 Gradle 提供的一個輕量級腳本工具,用于 在不預先安裝 Gradle 的情況下運行 Gradle 構建任務。它允許開發者同一項目的構建環境,避免因本地 Gradle 版本不同導致的構建問題。
可以直接通過 gradle wrapper 腳本對程序進行編譯、打包、測試、部署和發布等任務操作。
gradlew
:是針對 List/MacOS 的 gradle wrapper;gradlew.bat
:是針對 Windows 的 gradle wrapper。
補充:如何加速 gradle wrapper 的下載速度?
gradle wrapper 會自動下載 gradle,若默認的下載 gradle 的 url 網速很慢,可以替換成阿里云或騰訊云的地址。當然可以是你公司內部的文件下載地址。
我們在 gradle/wrapper/gradle-wrapper.properties
的 distributionUrl
類配置:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
若使用阿里云的地址加速(列表頁面:https://mirrors.aliyun.com/macports/distfiles/gradle/),配置如下:
distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5.1-bin.zip
若使用騰訊云的地址加速(列表頁面:https://mirrors.cloud.tencent.com/gradle/),配置如下:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip
3.3 settings.gradle 設置文件
本文件配置構建項目所需要的信息,Spring Boot 項目的該文件內容很簡單:
rootProject.name = 'gradle-demo'
此項是為了配置編譯之后文件的名字。
3.4 build.gradle 核心構建文件
1)原始文件內容
生成的 build.gradle 的文件內容如下:
plugins {id 'org.springframework.boot' version '2.7.5'id 'io.spring.dependency-management' version '1.0.15.RELEASE'id 'java'
}group = 'top.wisely'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'configurations {compileOnly {extendsFrom annotationProcessor}
}repositories {maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'testImplementation 'org.springframework.boot:spring-boot-starter-test'
}tasks.named('test') {useJUnitPlatform()
}
2)plugins 插件
plugins {...}
:插件部分,聲明了 plugins 的依賴。核心插件只需要使用 id 簡稱即可,社區插件需要使用全名稱的 id。id 'org.springframework.boot' version '2.7.5'
:社區插件,Spring Boot Gradle 插件,它為我們提供 Spring Boot 運行、創建可執行 jar 包或者 war 包的能力。id 'io.spring.dependency-management' version '1.0.15.RELEASE'
:社區插件,Spring Boot 依賴管理插件,它為我們提供對項目直接或間接依賴的庫的版本控制,這些都是 Spring Boot 做過兼容性測試的版本。id 'java'
:核心插件:Java 插件將 Java 編譯以及測試等功能添加到項目中。
3)repositories:倉庫源
repositories {...}
:倉庫源,配置了下載依賴包的地址。mavenCentral()
:Gradle 默認使用 Maven 的中心庫下載依賴包。maven { url 'https://maven.aliyun.com/repository/public/' }
:也可以通過阿里云的 Maven 鏡像庫來加速。maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
:或者通過騰訊云的 Maven 鏡像庫來加速。
4)dependencies 依賴
-
dependencies {...}
:依賴信息。-
implementation
:普通依賴。我們只需要按照下面的格式即可引入依賴:
implementation group: '***', name: '***', version: '***'
或簡寫成:
implementation 'group:name:version'
因為使用了 Spring Boot 依賴管理插件,只要被 Spring Boot 所管理的依賴,版本無須維護,可以更加精簡地寫成:
implementation 'group:name'
所以 Spring Boot 所管理的依賴樣子一般為:
dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'// ... }
-
在我們絕大部分時間,我們和 Gradle 做依賴相關的工作,在了解這些后都能解決了。
我們可以通過 https://mvnrepository.com/ 網站查找添加依賴,我們在依賴中選中 Gralde
來復制內容到我們的依賴中:
注意,一般情況下,我們會把復制來的版本號給去掉,以防 Spring Boot 已經對它做了版本管理,這樣我們就能直接下載兼容性良好的依賴包;如果去掉版本號后不能下載依賴包,意味著 Spring Boot 沒有做該包的版本管理,這是我們按照自己的需要添加合適的版本號。
testImplementation
:測試依賴testImplementation 'org.springframework.boot:spring-boot-starter-test'
:測試相關的依賴,使用 testImplementation,規則和普通依賴一致。
compileOnly
:編譯依賴compileOnly 'org.projectlombok:lombok'
:只在編譯期生效的依賴。
runtimeOnly
:運行時依賴runtimeOnly 'com.mysql:mysql-connector-j'
:旨在運行時起效的依賴。
由上述比較,我們發現Gradle有明顯于Maven的優勢。我提出下面的建議:
1、新項目嘗試使用Gradle來構建!
2、嘗試遷移Maven的老項目將其使用Gradle構建。(如:Spring/Spring Boot編譯工具從Maven遷移到了Gradle「官網翻譯」)
不愿遷移的理由很多:
1、對于Maven很熟悉了,不用遷移到新的工具!
2、又要學習一個新東西,卷不動了!
我覺得無論作為什么樣的職業,對新的東西要保持敏銳的感知和學習,不要停留在自己舒適的區域,無論Gradle有沒有那么優秀,或者有沒有那么多問題,我們要堅持嘗試一下。
最后送給大家一句話:
“I can’t understand why people are frightened of new ideas. I’m frightened of the old ones.” — John Cage
“我不明白為什么人們害怕新想法。 我害怕那些舊的。” - 約翰凱奇。
勇敢邁出舒適區,去冒險吧!

整理完畢,完結撒花~ 🌻
參考地址:
1.使用Gradle全面加速Spring Boot開發,https://zhuanlan.zhihu.com/p/578972804