升级 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_17

repositories {
    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。如果你有任何问题或建议,欢迎在评论区留言讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Yolov8 目标检测剪枝学习记录

最近在进行YOLOv8系列的轻量化,目前在网络结构方面的优化已经接近极限了,所以想要学习一下模型剪枝是否能够进一步优化模型的性能 这里主要参考了torch-pruning的基本使用,v8模型剪枝,Jetson nano部署剪枝YOLOv8 下面只是记录一个…

【深度学习】关键技术-激活函数(Activation Functions)

激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候,从单实例、单节点出发,一般有3种架构演进选项:主备高可用,今天我们具体讲讲分布式共识,以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

Oracle 终止正在执行的SQL

目录 一. 背景二. 操作简介三. 投入数据四. 效果展示 一. 背景 项目中要求进行性能测试,需要向指定的表中投入几百万条数据。 在数据投入的过程中发现投入的数据不对,需要紧急停止SQL的执行。 二. 操作简介 👉需要DBA权限👈 ⏹…

Datawhale组队学习笔记task1——leetcode面试题

文章目录 写在前面刷题流程刷题技巧 Day1题目1、0003.无重复字符的最长子串解答:2.00004 寻找两个正序数组的中位数解答:3.0005.最长回文子串解答4.0008.字符串转换整数解答: Day2题目1.0151.反转字符串中的单词解答2.0043.字符串相乘解答3.0…

K3二开:在工业老单工具栏增加按钮,实现打印锐浪报表

在上次实现用GridRepot报表实现打印任务单后,在想着能不能给将生产任务单原来要通过点击菜单栏,打印任务单的功能,在工具栏上也增加按钮实现,这样就不需要多点了。 原本是需要点击菜单栏才能实现的 现在在工具栏上增加按钮实现同…

[计算机网络]一. 计算机网络概论第一部分

作者申明&#xff1a;作者所有文章借助了各个渠道的图片视频以及资料&#xff0c;在此致谢。作者所有文章不用于盈利&#xff0c;只是用于个人学习。 1.0推荐动画 【网络】半小时看懂<计算机网络>_哔哩哔哩_bilibili 1.1计算机网络在信息时代的作用 在当今信息时代&…

机器学习之支持向量机SVM及测试

目录 1 支持向量机SVM1.1 概念1.2 基本概念1.3 主要特点1.4 优缺点1.5 核函数1.6 常用的核函数1.7 函数导入1.8 函数参数 2 实际测试2.1 二维可视化测试代码2.2 多维测试 1 支持向量机SVM 1.1 概念 支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff…

云服务信息安全管理体系认证,守护云端安全

在数据驱动的时代&#xff0c;云计算已成为企业业务的超级引擎&#xff0c;推动着企业飞速发展。然而&#xff0c;随着云计算的广泛应用&#xff0c;信息安全问题也日益凸显&#xff0c;如同暗流涌动下的礁石&#xff0c;时刻威胁着企业的航行安全。这时&#xff0c;云服务信息…

服务器数据恢复—Zfs文件系统数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台zfs文件系统的服务器&#xff0c;管理员误操作删除了服务器上的数据。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有硬盘做好标记后取出&#xff0c;硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…

​​​​​​​​​​​​​​★3.3 事件处理

★3.3.1 ※MouseArea Item <-- MouseArea 属性 acceptedButtons : Qt::MouseButtons containsMouse : bool 【书】只读属性。表明当前鼠标光标是否在MouseArea上&#xff0c;默认只有鼠标的一个按钮处于按下状态时才可以被检测到。 containsPress : bool curs…

GIS大模型:三维重建与建模

文章目录 数据收集预处理特征提取深度估计点云生成表面重建纹理映射大模型的角色 大模型在三维重建与建模方面&#xff0c;尤其是在处理低空地图数据时&#xff0c;展现了其强大的能力。通过使用深度学习算法&#xff0c;特别是那些基于卷积神经网络&#xff08;CNNs&#xff0…

wireshark抓路由器上的包 抓包路由器数据

文字目录 抓包流程概述设置抓包配置选项 设置信道设置无线数据包加密信息设置MAC地址过滤器 抓取联网过程 抓包流程概述 使用Omnipeek软件分析网络数据包的流程大概可以分为以下几个步骤&#xff1a; 扫描路由器信息&#xff0c;确定抓包信道&#xff1b;设置连接路由器的…

阿里云无影云电脑的使用场景

阿里云无影云电脑是一种安全、高效的云上虚拟桌面服务&#xff0c;广泛应用于多种场景&#xff0c;包括教育、企业办公、设计与视频制作、客服中心等。以下是九河云总结的无影云电脑的几个典型使用场景&#xff1a; #### 1. 教育机构 - **业务痛点**&#xff1a; - 学生实践操…

力扣 查找元素的位置

二分查找经典例题。 题目 要是只是从数组中用二分查找对应的元素&#xff0c;套一下模板一下就可以得出了&#xff0c;然后这题就在于其中会有多个目标元素&#xff0c;要用不同的方式在找到第一个元素时再做偏移。 时间复杂度&#xff1a;O(log n)&#xff0c;空间复杂度&am…

Profibus DP转Modbus TCP协议转换网关模块功能详解

Profibus DP 和 Modbus TCP 是两种不同的工业现场总线协议&#xff0c;Profibus DP 常用于制造业自动化领域&#xff0c;而 Modbus TCP 则在工业自动化和楼宇自动化等领域广泛应用。实现 Profibus DP 转 Modbus TCP 功能&#xff0c;通常需要特定的网关设备&#xff0c;以下为你…

SQL Prompt 插件

SQL Prompt 插件 注&#xff1a;SQL Prompt插件提供智能代码补全、SQL格式化、代码自动提示和快捷输入等功能&#xff0c;非常方便&#xff0c;可以自行去尝试体会。 1、问题 SSMS&#xff08;SQL Server Management Studio&#xff09;是SQL Server自带的管理工具&#xff0c…

OpenCV基础:矩阵的创建、检索与赋值

本文主要是介绍如何使用numpy进行矩阵的创建&#xff0c;以及从矩阵中读取数据&#xff0c;修改矩阵数据。 创建矩阵 import numpy as npa np.array([1,2,3]) b np.array([[1,2,3],[4,5,6]]) #print(a) #print(b)# 创建全0数组 eros矩阵 c np.zeros((8,8), np.uint8) #prin…

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 9.1 检查点&#xff08;Checkpoint&#xff09; 9.1.1 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我…

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(上)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习函数的概念&#xff0c;了解库函数中的标准库、头文件&#xff0c;了解自定义函数…