目录
- 一、什么是 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