目录

一、迁移背景
1.1 迁移原因
最近嫌弃 项目编译比较慢,又听说 Gradle 构建速度会比 Maven 快很多(官方的说法是至少快2倍),于是萌生了将已有项目的 Maven 编译,迁移到 Gradle 编译的想法。当然,万事开头难,所以我决定先从一个 Demo 项目开始入手。
1.2 项目背景
- 项目基本信息:
- 项目名称:springboot-demo
- 版本:0.0.1-SNAPSHOT
- Java版本:1.8
- 目录结构:
nginx
springboot-demo/
├── .gitignore # Git忽略文件配置
├── pom.xml # Maven项目配置文件
├── README.md # 项目说明文档
└── src/
├── main/ # 主要源代码目录
│ ├── java/
│ │ └── com/
│ │ └── demo/
│ │ ├── SpringbootDemoApplication.java # 应用启动类
│ │ ├── Example.java # 示例类
│ │ ├── common/
│ │ │ └── Result.java # 通用响应类
│ │ └── controller/
│ │ └── DemoController.java # 示例控制器
│ └── resources/
│ └── application.properties # 应用配置文件
└── test/ # 测试源代码目录
└── java/
└── com/
└── demo/
└── SpringbootDemoApplicationTests.java # 测试类
最外层文件内容如下所示:

- Maven依赖:
- Spring Boot Web Starter (spring-boot-starter-web)
- Spring Boot Test Starter (spring-boot-starter-test)
- Lombok
- FastJSON (1.2.78)
- Commons Codec (1.11)
- Commons IO (2.16.1)
pom.xml 内容如下:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.4.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
<!-- 加解密工具包 -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、迁移步骤
2.1 方式一:使用 gradle init
命令
-
Gradle 官方非常贴心的内置了插件,可以一键将 Maven 的 pom.xml 转换为 Gradle 配置,只需要在项目目录内执行如下命令:
shellgradle init
执行结果:

迁移后目录:

- 优点: 使用
gradle init
命令这种方式简单便捷; - 缺点: 适用范围却非常有限。如果
pom.xml
中包含<parent>
、<dependencyManagement>
这种依赖管理内容,gradle init 是不支持转换的。
2.2 方式二:手动迁移
顾名思义,手动迁移就是需要手动根据依赖内容进行逐一 pom.xml
到 build.gradle
的转换。这种方式就比较考验开发者对于 Maven 和 Gradle 这两种构建工具的了解程度了。
整体包括三个迁移步骤:
- 创建Gradle构建文件 :编写
build.gradle
和settings.gradle
文件,迁移项目配置和依赖声明。 - 清理Maven配置 :删除原有的
pom.xml
及Maven相关文件(如mvnw
)。 - 验证构建功能 :执行
gradle build
等命令,确保项目正常编译、测试和运行。
1)创建 Gradle 构建文件(build.gradle、settings.gradle)
build.gradle 配置:
groovy
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.4.5'
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// Spring Boot starters
implementation 'org.springframework.boot:spring-boot-starter-web'
// 开发工具
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// 工具库
implementation 'com.alibaba:fastjson:1.2.78'
implementation 'commons-codec:commons-codec:1.11'
implementation 'commons-io:commons-io:2.16.1'
// 测试依赖
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
test {
useJUnitPlatform()
}
bootJar {
enabled = true
archiveClassifier = ''
}
jar {
enabled = false
}
settings.gradle 配置:
groovy
rootProject.name = 'springboot-demo'
关键配置说明:
- 插件配置 :
spring-boot
插件提供Spring Boot项目支持;dependency-management
插件用于管理依赖版本;java
插件提供Java项目基本功能。
- 项目基本信息 :
- 保持与原来Maven项目相同的
group
和version
; - 指定Java 1.8兼容性。
- 保持与原来Maven项目相同的
- 依赖管理 :
- 使用
implementation
替代Maven的<dependency>
; - 开发时依赖使用
compileOnly
和developmentOnly
; - 注解处理器使用
annotationProcessor
。
- 使用
- 测试配置 :
- 明确使用JUnit 5平台;
- 保持与Maven相同的测试依赖。
2)移除 Maven 配置文件
迁移完成后,可以删除一下 Maven 特定文件:
pom.xml
(主Maven配置文件).mvn/
目录(如果有)mvnw
和mvnw.cmd
(Maven包装器脚本)
3)验证构建功能
在 IDEA 中,我们可以右键 build.gradle
,选择 Link Gradle Project
进行关联。

关联之后,可能会出现一些报错,需要我们根据提示进行 Gradle 和 JDK 的版本调整:

在 Settings 中进行 Gradle 和相应 JDK 的配置,如下所示:

等待 Gradle 将依赖导入完毕。

如果过程中出现如下报错:
Cause: org.gradle.api.internal.artifacts.dsl.LazyPublishArtifact.<init>(Lorg/gradle/api/provider/Provider;)V

说明 gradle-wrapper.properties
与 Gradle 核心版本不一致,需要调整:

关联成功之后提示如下:

右侧 Gradle 刷新之后也能看到我们的项目了:

点击 IDEA 中的 Debug
按钮进行启动,可以看到控制台中已经启动成功了:

项目中存在如下接口:
java
import com.demo.common.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p> @Title DemoController
* <p> @Description 测试控制器
*
* @author ACGkaka
* @date 2021/11/5 9:34
*/
@RestController
@RequestMapping("/test")
public class DemoController {
@GetMapping("/hello")
public Result<Object> hello() {
return Result.succeed("hello world");
}
}
启动项目后,请求本地接口:http://localhost:8088/test/hello
请求结果如下所示:

迁移前后,项目的构建速度对比如下:
Maven 构建:(耗时 7 秒 743 毫秒)

Gradle 构建:(耗时 2 秒 410 毫秒)

速度提升:(1-2410/7743)* 100% = 68.88%。
整理完毕,完结撒花~ 🌻
参考地址:
1.手把手,一步步教你将Maven项目迁移到Gradle,https://zhuanlan.zhihu.com/p/185013144