升級 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.pswp.cn/web/66177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66177.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java學習筆記(二十三)

1 CacheEvict CacheEvict是Spring框架中用于清空緩存的注解。以下是對CacheEvict注解的詳細介紹: 1.1 作用 CacheEvict注解的主要作用是刪除緩存中的數據。在方法執行后或執行前(根據配置),它可以清空指定的緩存項或整個緩存區…

如何優化Elasticsearch大文檔查詢?

記錄一次業務復雜場景下DSL優化的過程 背景 B端商城業務有一個場景就是客戶可見的產品列表是需要N多閘口及各種其它邏輯組合過濾的,各種閘口數據及產品數據都是存儲在ES的(有的是獨立索引,有的是作為產品屬性存儲在產品文檔上)。 在實際使用的過程中&a…

openCvSharp 計算機視覺圖片找茬

一、安裝包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、準備兩張圖片 三、編寫代碼 using OpenCv…

實戰:FRP內網穿透部署-支持ssh、web訪問

目錄 1 準備工作2 公網服務器部署server端2.1 frps.ini配置 3 內網客戶端部署client端3.1 frpc.ini配置&#xff08;內網服務器01&#xff09;3.2 frpc.ini配置&#xff08;內網服務器02&#xff09; 4 服務啟動腳本4.1 公網服務器 server4.2 內網服務器 client 2 systemctl常見…

Uniapp中實現加載更多、下拉刷新、返回頂部功能

一、加載更多&#xff1a; 在到達底部時&#xff0c;將新請求過來的數據追加到原來的數組即可&#xff1a; import {onReachBottom } from "dcloudio/uni-app";const pets ref([]); // 顯示數據function network() {uni.request({url: "https://api.thecatap…

C# 多線程 Task TPL任務并行

先總結一下 之前發展過程的要點 1&#xff1a; 為了保證多線程正確順序執行 線程同步 2&#xff1a; 為了節省操作系統線程資源 線程池 異步 方式管理 正常來講 使用這倆個要點 進行使用 多線程可以滿足開發使用需求 但是 新的問題產生了 那就是 多個異步操作 需要編寫大量的代…

C++單例模式的設計

單例模式&#xff08;Singleton Pattern&#xff09;是一種設計模式&#xff0c;用于確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。在C中&#xff0c;單例模式通常用于管理全局資源或共享狀態。 以下是C中實現單例模式的幾種常見方式&#xff1a; 懶…

HBASE學習(一)

1.HBASE基礎架構&#xff0c; 1.1 參考&#xff1a; HBase集群架構與讀寫優化&#xff1a;理解核心機制與性能提升-CSDN博客 1.2問題&#xff1a; 1.FLUSH對hbase的影響 2. HLog和memstore的區別 hlog中存儲的是操作記錄&#xff0c;比如寫、刪除。而memstor中存儲的是寫入…

Flutter:封裝ActionSheet 操作菜單

演示效果圖 action_sheet_util.dart import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:demo/common/index.dart;class ActionSheetUtil {/// 底部操作表/// [context] 上下文/// [title] 標題/// [items] 選項列表 …

【Rust練習】28.use and pub

練習題來自&#xff1a;https://practice-zh.course.rs/crate-module/use-pub.html 1 使用 use 可以將兩個同名類型引入到當前作用域中&#xff0c;但是別忘了 as 關鍵字. use std::fmt::Result; use std::io::Result;fn main() {}利用as可以將重名的內容取別名&#xff1a;…

Nginx 可觀測性最佳實踐

Nginx 介紹 Nginx 是一個開源、輕量級、高性能的 HTTP 和反向代理服務器&#xff0c;也可以用于 IMAP/POP3 代理服務器。Nginx 因其采用的異步非阻塞工作模型&#xff0c;使其具備高并發、低資源消耗的特性。高度模塊化設計也使得 Nginx 具備很好的擴展性&#xff0c;在處理靜…

《汽車維護與修理》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

?問題解答&#xff1a; 問&#xff1a;《汽車維護與修理》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知網收錄的正規學術期刊。 問&#xff1a;《汽車維護與修理》級別&#xff1f; 答&#xff1a;國家級。主管單位&#xff1a;中國汽車維修行業協會 …

PHP智慧小區物業管理小程序

&#x1f31f;智慧小區物業管理小程序&#xff1a;重塑社區生活&#xff0c;開啟便捷高效新篇章 &#x1f31f; 智慧小區物業管理小程序是一款基于PHPUniApp精心雕琢的智慧小區物業管理小程序&#xff0c;它猶如一股清新的科技之風&#xff0c;吹進了現代智慧小區的每一個角落…

洛谷P4868 Preprefix sum

洛谷傳送門 題目描述 前綴和&#xff08;prefix sum&#xff09;&#x1d446;&#x1d456;。 前前綴和&#xff08;preprefix sum&#xff09;則把 &#x1d446;&#x1d456; 作為原序列再進行前綴和。記再次求得前綴和第 &#x1d456; 個是 &#x1d446;&#x1d446…

機器學習中的凸函數和梯度下降法

一、凸函數 在機器學習中&#xff0c;凸函數 和 凸優化 是優化問題中的重要概念&#xff0c;許多機器學習算法的目標是優化一個凸函數。這些概念的核心思想圍繞著優化問題的簡化和求解效率。下面從簡單直觀的角度來解釋。 1. 什么是凸函數&#xff1f; 數學定義 一個函數 f…

vue3使用vue-native-websocket-vue3通訊

vue3使用vue-native-websocket-vue3通訊 插件使用一、啟用Vuex集成1.在mian.js中2.store/index.js文件中3.要websocket使用的頁面 二、啟用Piain集成1.在mian.js中2.根目錄下創建store文件夾&#xff0c;分別創建PiniaType.ts&#xff0c;store.ts&#xff0c;useSocketStore.t…

Windows圖形界面(GUI)-QT-C/C++ - Qt控件與布局系統詳解

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> ???鏈接點擊跳轉博客主頁 目錄 Qt布局系統(Layouts) 布局管理器基礎 高級布局技巧 嵌套布局 設置間距和邊距 常用控件詳解 按鈕類控件 QPushButton (標準按鈕) QRadioButton (單選按鈕) QCheckBox (復選框) …

深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法

ECMAScript 2024 引入了一個新的字符串實例方法&#xff1a;String.prototype.isWellFormed。這一新增功能是為了幫助開發者更容易地驗證字符串是否為有效的 Unicode 文本。本文將詳細介紹這一方法的使用場景、實現原理及其在實際應用中的價值。 String.prototype.isWellFormed…

[Linux]Docker快速上手操作教程

前言 以下命令并不是docker的所有&#xff0c;僅涉及日常使用時最最常用的命令。 目的之一時給入門的朋友熟悉學習&#xff0c;其二時我自己偶爾使用時備忘。 一、概念 簡單介紹下docker的相關概念&#xff1a; 鏡像&#xff1a;Docker 鏡像是一個輕量級、可執行的獨立軟件…

【算法學習筆記】32:篩法求解歐拉函數

上節學習的是求一個數 n n n的歐拉函數&#xff0c;因為用的試除法&#xff0c;所以時間復雜度是 O ( n ) O(\sqrt{n}) O(n ?)&#xff0c;如果要求 m m m個數的歐拉函數&#xff0c;那么就會花 O ( m n ) O(m \sqrt{n}) O(mn ?)的時間。如果是求連續一批數的歐拉函數&#x…