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

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.xdnf.cn/news/17725.html

相关文章:

  • spring mvc HttpMessageConverter 消息转换器
  • 【KALI】第一篇 安装Kali Linux虚拟机之详细操作步骤讲解
  • CNN - 卷积层
  • 利用 Java 爬虫按图搜索 1688 商品(拍立淘)实战指南
  • 高效TypeScript开发:VSCode终极配置指南
  • Varjo XR虚拟现实军用车辆驾驶与操作培训
  • 【MATLAB代码】滑动窗口均值滤波、中值滤波、最小值/最大值滤波对比。订阅专栏后可查看完整代码
  • OpenCV中对图像进行平滑处理的4种方式
  • 《多级缓存架构设计与实现全解析》
  • 【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】
  • 机器视觉的磁芯定位贴合应用
  • GraphRAG查询(Query)流程实现原理分析
  • Java+Vue构建的MES信息管理系统,含完整源码,功能涵盖生产跟踪、质量管控等,助力企业实现精细化、智能化生产管理
  • 【16-softmax回归】
  • AI 赋能的软件工程全生命周期应用
  • springboot+vue实现通过poi完成excel
  • Postman 平替 技术解析:架构优势与实战指南
  • 观察者模式(C++)
  • 【Leetcode hot 100】76.最小覆盖字串
  • 【HarmonyOS】Window11家庭中文版开启鸿蒙模拟器失败提示未开启Hyoer-V
  • SwiftUI 页面弹窗操作
  • 用飞算JavaAI一键生成电商平台项目:从需求到落地的高效实践
  • 使用免费API开发口播数字人
  • [机器学习]07-基于多层感知机的鸢尾花数据集分类
  • c++中的Lambda表达式详解
  • Java基础07——基本运算符(本文为个人学习笔记,内容整理自哔哩哔哩UP主【遇见狂神说】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • k8s+isulad 网络问题
  • 如何使用 AI 大语言模型解决生活中的实际小事情?
  • 【P81 10-7】OpenCV Python【实战项目】——车辆识别、车流统计(图像/视频加载、图像运算与处理、形态学、轮廓查找、车辆统计及显示)
  • 网络协议序列化工具Protobuf