Gradle(四)Maven 项目迁移 Gradle 项目实践
目录
- 一、迁移背景
- 1.1 迁移原因
- 1.2 项目背景
- 二、迁移步骤
- 2.1 方式一:使用 `gradle init` 命令
- 2.2 方式二:手动迁移
- 1)创建 Gradle 构建文件(build.gradle、settings.gradle)
- 2)移除 Maven 配置文件
- 3)验证构建功能

一、迁移背景
1.1 迁移原因
最近嫌弃 项目编译比较慢,又听说 Gradle 构建速度会比 Maven 快很多(官方的说法是至少快2倍),于是萌生了将已有项目的 Maven 编译,迁移到 Gradle 编译的想法。当然,万事开头难,所以我决定先从一个 Demo 项目开始入手。
1.2 项目背景
- 项目基本信息:
- 项目名称:springboot-demo
- 版本:0.0.1-SNAPSHOT
- Java版本:1.8
- 目录结构:
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 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 配置,只需要在项目目录内执行如下命令:
gradle 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 配置:
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 startersimplementation '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 = truearchiveClassifier = ''
}jar {enabled = false
}
settings.gradle 配置:
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
按钮进行启动,可以看到控制台中已经启动成功了:
项目中存在如下接口:
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