升级 SpringBoot3 全项目讲解 — 为什么 SpringBoot3 应该抛弃 Maven,搭配 Gradle 来使用?

学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕!

在这里插入图片描述
在这里插入图片描述
随着 Spring Boot 3 的发布,许多开发者开始考虑如何将现有项目升级到最新版本。Spring Boot 3 带来了许多新特性,包括对 Java 17 的支持、更好的性能优化以及对 GraalVM 的原生镜像支持。然而,在升级过程中,开发者们往往会忽略一个重要的环节:构建工具的选择。

长期以来,Maven 一直是 Java 生态系统中最为流行的构建工具之一。然而,随着 Gradle 的崛起,越来越多的项目开始转向 Gradle。本文将探讨为什么在升级到 Spring Boot 3 时,你应该考虑抛弃 Maven,转而使用 Gradle,并通过代码示例来展示 Gradle 的优势。

1. 为什么选择 Gradle?

1.1 构建速度更快

Gradle 采用了增量构建和缓存机制,这使得它在构建速度上比 Maven 更快。尤其是在大型项目中,Gradle 的优势更加明显。Spring Boot 3 项目通常包含大量的依赖和模块,使用 Gradle 可以显著减少构建时间。

1.2 灵活的构建脚本

Gradle 使用 Groovy 或 Kotlin DSL 作为构建脚本语言,这使得构建脚本更加灵活和强大。相比之下,Maven 的 XML 配置文件显得笨重且难以维护。通过 Gradle,你可以轻松地编写自定义任务、插件和扩展,以满足项目的特定需求。

1.3 更好的依赖管理

Gradle 的依赖管理机制比 Maven 更加灵活。它支持动态版本、依赖排除、依赖替换等高级功能。此外,Gradle 还支持复合构建(Composite Builds),这使得在多模块项目中管理依赖变得更加容易。

2. 从 Maven 迁移到 Gradle

2.1 创建 Gradle 构建脚本

首先,你需要在项目的根目录下创建一个 build.gradle 文件。以下是一个简单的 build.gradle 文件示例:

plugins {id 'org.springframework.boot' version '3.0.0'id 'io.spring.dependency-management' version '1.1.0'id 'java'
}group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'repositories {mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'testImplementation 'org.springframework.boot:spring-boot-starter-test'
}test {useJUnitPlatform()
}

在这个示例中,我们使用了 Spring Boot 3 的 Gradle 插件,并指定了 Java 17 作为源代码兼容性版本。dependencies 块中定义了项目所需的依赖。

2.2 迁移 Maven 依赖

如果你已经有一个使用 Maven 构建的 Spring Boot 项目,你可以使用 Gradle 的 maven-publish 插件来自动迁移 Maven 依赖。以下是一个示例:

plugins {id 'maven-publish'
}publishing {publications {mavenJava(MavenPublication) {from components.java}}
}

通过这个插件,你可以将 Maven 项目中的依赖自动转换为 Gradle 的依赖格式。

2.3 多模块项目支持

在 Spring Boot 3 中,多模块项目非常常见。Gradle 对多模块项目的支持非常友好。以下是一个多模块项目的 settings.gradle 文件示例:

rootProject.name = 'my-spring-boot-project'include 'module1'
include 'module2'

在每个子模块中,你可以创建一个独立的 build.gradle 文件来定义模块特定的配置和依赖。

3. Gradle 的高级特性

3.1 自定义任务

Gradle 允许你轻松地定义自定义任务。以下是一个简单的自定义任务示例,用于打印项目的版本号:

task printVersion {doLast {println "Project version: ${project.version}"}
}

你可以通过运行 gradle printVersion 来执行这个任务。

3.2 使用 Kotlin DSL

如果你更喜欢 Kotlin,Gradle 也支持使用 Kotlin DSL 来编写构建脚本。以下是一个使用 Kotlin DSL 的 build.gradle.kts 文件示例:

plugins {id("org.springframework.boot") version "3.0.0"id("io.spring.dependency-management") version "1.1.0"java
}group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17repositories {mavenCentral()
}dependencies {implementation("org.springframework.boot:spring-boot-starter-web")testImplementation("org.springframework.boot:spring-boot-starter-test")
}tasks.test {useJUnitPlatform()
}

3.3 依赖锁定

Gradle 支持依赖锁定(Dependency Locking),这可以帮助你在多环境中保持依赖的一致性。以下是一个启用依赖锁定的示例:

dependencyLocking {lockAllConfigurations()
}

通过运行 gradle dependencies --write-locks,你可以生成依赖锁定文件。

4. 结论

在升级到 Spring Boot 3 的过程中,选择 Gradle 作为构建工具可以带来诸多优势。Gradle 不仅构建速度更快,而且提供了更加灵活和强大的构建脚本编写能力。通过本文的示例代码,你可以轻松地将现有项目从 Maven 迁移到 Gradle,并充分利用 Gradle 的高级特性来优化你的构建流程。

如果你还没有尝试过 Gradle,现在是时候考虑将它引入到你的 Spring Boot 3 项目中了。相信在不久的将来,Gradle 将成为 Java 生态系统中的主流构建工具。


希望这篇文章能够帮助你更好地理解为什么在升级到 Spring Boot 3 时应该选择 Gradle。如果你有任何问题或建议,欢迎在评论区留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2409.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大疆上云API基于源码部署

文章目录 大疆上云API基于源码部署注意事项1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Red…

Js:正则表达式及正则表达式方法

① 创建正则表达式对象: /** 语法:* var reg new RegExp(正则表达式, 匹配模式);* 匹配模式(字符串类型):i --> 忽略大小写 g --> 全局匹配模式*/var reg new RegExp(a, i);var str abc; /** 正则表达式的方法&#…

【论文阅读】具身人工智能(Embodied AI)综述:连接数字与物理世界的桥梁

摘要 具身人工智能(Embodied AI)对于实现通用人工智能(AGI)至关重要,是连接数字世界与物理世界的各类应用的基础。近年来,多模态大模型(MLMs)和世界模型(WMs&#xff09…

数据结构--二叉树

目录 有序二叉树: 平衡二叉树: 234树: 红黑树 红黑树特点: 为什么红黑树是最优二叉树? 哈夫曼树和哈夫曼编码 有序二叉树: 平衡二叉树: 在有序二叉树的基础上得来的,且左右子…

【算法】图解两个链表相交的一系列问题

问: 给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null。如果两个链表长度之和为N,时间复杂度请达到O(N…

Python文件操作中编码解码问题

一、错误介绍 在学习python文件操作过程中遇到了UnicodeDecodeError错误,报错信息如下图所示。 二、错误产生的原因 下面是个人理解,可能存在错误,请理性看待。 windows默认按照GBK来进行编码的,而处理的文件是用UTF-8进行编码…

麦田物语学习笔记:构建游戏的时间系统

基本流程 1.代码思路 (1)新建一个TimeManager.cs (2)创建枚举变量来表示四季,在TimeManager里需要的变量有: 游戏内的秒,分钟,小时,天,月,年;游戏内的季节;控制一个季节有多少个月;控制时间的暂停;计时器tikTime (3)在Settings里添加计时器的阈值,以及各个时间的进位 (4)初始化…

《leetcode-runner》如何手搓一个debug调试器——指令系统

前文: 《leetcode-runner》如何手搓一个debug调试器——引言 《leetcode-runner》如何手搓一个debug调试器——架构 文章目录 什么是指令系统指令的组成部分leetcode-runner支持哪些指令如何解析用户输入的命令行指令识别流程 仓库地址:leetcode-runner …

Python 实现 NLP 的完整流程

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)

用户在前端页面登录成功后会从服务端获取Token,后续调用服务器的服务接口时都得带着Token,否则就会验证失败。之前使用postman测试的时候,获取Token后再调用其它服务都是人工将Token添加到Header中,网页中没法这么做,只…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

下载文件,浏览器阻止不安全下载

背景: 在项目开发中,遇到需要下载文件的情况,文件类型可能是图片、excell表、pdf、zip等文件类型,但浏览器会阻止不安全的下载链接。 效果展示: 下载文件的两种方式: 一、根据接口的相对url,拼…

【漏洞分析】DDOS攻防分析

0x00 UDP攻击实例 2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。 PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的…

低代码独特架构带来的编译难点及多线程解决方案

前言 在当今软件开发领域,低代码平台以其快速构建应用的能力,吸引了众多开发者与企业的目光。然而,低代码平台独特的架构在带来便捷的同时,也给编译过程带来了一系列棘手的难点。 一,低代码编译的难点 (1…

Android BitmapShader更简易的实现刮刮乐功能,Kotlin

Android BitmapShader更简易的实现刮刮乐功能,Kotlin 比这种方式 Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现“刮刮乐”效果,Kotlin(2)-CSDN博客 更简单实现刮刮乐效果。 import android.content.Cont…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

客户案例:某家居制造企业跨境电商,解决业务端(亚马逊平台)、易仓ERP与财务端(金蝶ERP)系统间的业务财务数据对账互通

一、系统定义 1、系统定位: 数据中台系统是一种战略选择和组织形式,通过有型的产品支撑和实施方法论,解决企业面临的数据孤岛、数据维护混乱、数据价值利用低的问题,依据企业特有的业务和架构,构建一套从数据汇聚、开…

springboot程序快速入门

1.新建springboot项目 一上来输入项目名字语言选javaType选Mavenjdk 1.8java选8packaging选jar 选择对应的springboot版本2.6.13Web里面勾上Spring Web 点击创建即可。 2.手工编辑一个控制器 手动创建一个Controller类: package com.example.springbootgate.con…

【Linux】常见指令(一)

Linux常见指令 01.whoami02.pwd03.ls04.mkdir05.cd 本文LInux环境为,使用XShell远程登陆到Linux。 具体如何环境搭建,大家可以查看其他博客。 01.whoami whoami 指令用来查看当前账户是谁。 如上图所示,使用whoami指令,查看到现在…

鸿蒙UI开发——键盘弹出避让模式设置

1、概 述 我们在鸿蒙开发时,不免会遇到用户输入场景,当用户准备输入时,会涉及到输入法的弹出,我们的界面针对输入法的弹出有两种避让模式:上抬模式、压缩模式。 下面针对输入法的两种避让模式的设置做简单介绍。 2、…