当前位置: 首页 > news >正文

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 项目背景

  1. 项目基本信息:
  • 项目名称:springboot-demo
  • 版本:0.0.1-SNAPSHOT
  • Java版本:1.8
  1. 目录结构:
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  # 测试类

最外层文件内容如下所示:

在这里插入图片描述

  1. 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.xmlbuild.gradle 的转换。这种方式就比较考验开发者对于 Maven 和 Gradle 这两种构建工具的了解程度了。

整体包括三个迁移步骤:

  1. 创建Gradle构建文件:编写build.gradlesettings.gradle文件,迁移项目配置和依赖声明。
  2. 清理Maven配置:删除原有的pom.xml及Maven相关文件(如mvnw)。
  3. 验证构建功能:执行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'

关键配置说明:

  1. 插件配置
    • spring-boot插件提供Spring Boot项目支持;
    • dependency-management插件用于管理依赖版本;
    • java插件提供Java项目基本功能。
  2. 项目基本信息
    • 保持与原来Maven项目相同的groupversion
    • 指定Java 1.8兼容性。
  3. 依赖管理
    • 使用implementation替代Maven的<dependency>
    • 开发时依赖使用compileOnlydevelopmentOnly
    • 注解处理器使用annotationProcessor
  4. 测试配置
    • 明确使用JUnit 5平台;
    • 保持与Maven相同的测试依赖。
2)移除 Maven 配置文件

迁移完成后,可以删除一下 Maven 特定文件:

  • pom.xml(主Maven配置文件)
  • .mvn/目录(如果有)
  • mvnwmvnw.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

http://www.lryc.cn/news/620905.html

相关文章:

  • [激光原理与应用-274]:理论 - 波动光学 - 光是电磁波,无线电磁波可以通过天线接收和发送,为什么可见光不可以?
  • 滑动窗口题目:定长子串中元音的最大数目
  • 【读代码】开源流式语音编码器SecoustiCodec
  • MySQL的索引(索引的创建和设计原则):
  • python自学笔记8 二维和三维可视化
  • 业务敏捷性对SAP驱动型企业意味着什么?如何保持企业敏捷性?
  • 网络通信全过程:sk_buff的关键作用
  • ⭐CVPR2025 3D 高斯探测视觉基础模型3D能力
  • Mybatis学习笔记(五)
  • 3D-R1、Scene-R1、SpaceR论文解读
  • 区块链 + 域名Web3时代域名投资的新风口(上)
  • CTFSHOW | nodejs题解 web334 - web344
  • 一颗TTS语音芯片给产品增加智能语音播报能力
  • 关于RSA和AES加密
  • vue+后端
  • vue3使用leaflet地图
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权(源码下载)
  • 跨域及解决方案
  • python+vue扫盲
  • langchain入门笔记03:使用fastapi部署本地大模型后端接口,优化局域网内的问答响应速度
  • Room 数据存储
  • AI 赋能:从智能编码提速到金融行业革新的实践之路
  • 机器翻译:Hugging Face库详解
  • 【51单片机学习】定时器、串口、LED点阵屏、DS1302实时时钟、蜂鸣器
  • 深入解析Prompt缓存机制:原理、优化与实践经验
  • (第十五期)HTML文本格式化标签详解:让文字更有表现力
  • 若依前后端分离版学习笔记(十)——数据权限
  • 阿里云TranslateGeneral - 机器翻译SDK-自己封账单文件版本—仙盟创梦IDE
  • 在mysql> 下怎么运行 .sql脚本
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目