在当前的 Java Web 开发中,Maven 仍是许多开发者的默认构建工具。不过,作为 Google 大力推崇的构建工具,Gradle 不仅在 Android 开发领域占据主导,在 Java 后端项目中也展现出取代 Maven 的强劲势头。Gradle 的实际体验究竟如何?本文将以一个名为 mall-tiny 的脚手架项目为例,带你实际体验从 Maven 迁移到 Gradle 的全过程,并对比两者的构建性能。
Gradle简介
Gradle 是一款开源的自动化构建工具,它以高度的灵活性和卓越的性能著称,支持使用 Groovy 或 Kotlin DSL 编写构建脚本。无论是移动应用开发还是微服务架构,从小型团队到大型企业,Gradle 都在致力于提升开发者的生产效率。
Gradle 的核心特性包括:
- 高度可定制:采用可定制、可扩展的模型,灵活性极高。
- 构建速度快:通过复用之前执行的输出、仅处理已变更的输入以及并行执行任务来显著加速构建过程。
- 功能强大:不仅是 Android 的官方构建工具,还支持多种主流语言和技术栈。
Gradle使用体验
接下来,我将把原有的 Maven 项目 mall-tiny 改造为使用 Gradle 构建,亲身感受一下 Gradle 的工作流程。
创建Gradle项目



- 接下来,选择使用我们刚才下载并解压的本地 Gradle 发行版,并指定其所在目录。

- 项目创建完成后,你会看到一个简单的 Gradle 项目目录结构。其中,
build.gradle 和 settings.gradle 是两个需要重点关注的文件。

Gradle插件介绍
在新创建的 build.gradle 文件中,我们可以看到预先配置了三个插件:
plugins {
id 'org.springframework.boot' version '2.3.9.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
org.springframework.boot
这是 Spring Boot 官方提供的 Gradle 插件,方便我们集成和使用 Spring Boot。通过修改 version 可以控制所使用的 Spring Boot 版本。
io.spring.dependency-management
这是一个提供依赖版本管理功能的 Gradle 插件,其作用类似于 Maven 的 dependencyManagement。
例如,之前用 Maven 管理 Druid 版本时,我们会在 <dependencyManagement> 中定义好版本:
<dependencyManagement>
<dependencies>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在引入依赖时就无需再指定版本号了,这样做的好处是可以统一管理依赖版本。
<dependencies>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
</dependencies>
在 Gradle 中,你可以这样实现,语法看起来更为简洁:
dependencies {
implementation 'com.alibaba:druid-spring-boot-starter'
}
dependencyManagement {
dependencies {
dependency 'com.alibaba:druid-spring-boot-starter:1.1.10'
}
}
java
Java 插件为项目添加了编译、测试等 Java 项目常用的功能,它是许多其他 JVM 语言 Gradle 插件的基础。
Maven转Gradle
将 Maven 项目转换为 Gradle 项目其实非常简单,核心工作就是将 pom.xml 中的依赖声明转换为 build.gradle 中的格式。
- 以 Hutool 依赖为例,在 Maven 中的写法是这样的:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.7</version>
</dependency>
- 在 Gradle 中,一行代码就能搞定:
dependencies {
implementation 'cn.hutool:hutool-all:4.5.7'
}
- 有时从默认仓库下载依赖速度较慢,我们可以将仓库地址修改为阿里云的 Maven 镜像来加速下载:
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
- 以下是一个完整的
build.gradle 文件示例,已经包含了 mall-tiny 项目所需的所有依赖:
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.macro.mall.tiny'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-configuration-processor'
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'com.alibaba:druid-spring-boot-starter'
implementation 'mysql:mysql-connector-java'
implementation 'io.springfox:springfox-swagger2'
implementation 'io.springfox:springfox-swagger-ui'
implementation 'io.swagger:swagger-models'
implementation 'io.swagger:swagger-annotations'
implementation 'cn.hutool:hutool-all'
implementation 'io.jsonwebtoken:jjwt'
implementation 'com.baomidou:mybatis-plus-boot-starter'
implementation 'com.baomidou:mybatis-plus-generator'
implementation 'org.apache.velocity:velocity-engine-core'
}
dependencyManagement {
dependencies {
dependency 'com.alibaba:druid-spring-boot-starter:1.1.10'
dependency 'mysql:mysql-connector-java:8.0.16'
dependency 'io.springfox:springfox-swagger2:2.9.2'
dependency 'io.springfox:springfox-swagger-ui:2.9.2'
dependency 'io.swagger:swagger-models:1.6.0'
dependency 'io.swagger:swagger-annotations:1.6.0'
dependency 'cn.hutool:hutool-all:4.5.7'
dependency 'io.jsonwebtoken:jjwt:0.9.0'
dependency 'com.baomidou:mybatis-plus-boot-starter:3.3.2'
dependency 'com.baomidou:mybatis-plus-generator:3.3.2'
dependency 'org.apache.velocity:velocity-engine-core:2.2'
}
}
test {
useJUnitPlatform()
}
* 最后一步,将原项目的源代码文件复制到新项目的 `src` 目录下即可。至此,Gradle 改造工作就完成了。

## 对比Maven
> Gradle 一直以构建速度快著称,官方也如此宣传。那么,我们将项目清理后重新构建,实测一下它的速度到底有多快。
* 首先,使用原来的 [Maven](https://yunpan.plus/f/28-1) 项目,直接执行 `clean` 后再执行 `package` 命令进行打包构建。

* 控制台输出如下,总耗时约为 **32 秒**。

* 然后,使用改造后的 Gradle 项目,同样先执行 `clean` 任务,再执行 `bootJar` 任务(相当于 Maven 的 `package`)进行打包构建。

* 控制台输出如下,总耗时仅为 **15 秒**,速度提升了一倍以上!

* 再附上一张官方的性能对比图,数据显示 Gradle 的构建速度确实比 Maven 快一倍左右,这个结论是相当可靠的。

## 总结
Gradle 作为 Google 官方推荐的构建工具,其表现确实令人印象深刻。如果你熟悉 Groovy 脚本,将能充分发挥其灵活的优势。此外,Gradle 的语法简洁明了,构建速度相比传统工具也有显著提升,对于追求效率的开发和构建流程来说,是一个值得考虑的选择。欢迎在 [云栈社区](https://yunpan.plus) 分享你在构建工具选型或迁移过程中的经验和见解。
## 参考资料
Gradle 官方文档:https://docs.gradle.org
## 项目源码地址
https://github.com/macrozheng/mall-tiny/tree/gradle