Spring Boot 依賴管理: `spring-boot-starter-parent` 與 `spring-boot-dependencies`

前言

在 Spring Boot 的開發實踐中,依賴管理是構建高質量應用的基礎。spring-boot-starter-parentspring-boot-dependencies 是 Spring Boot 提供的兩大核心依賴管理工具,它們在簡化依賴版本控制、統一配置等方面發揮著關鍵作用。

一、核心概念解析

1.1 spring-boot-starter-parent

  • 定義
    是一個 Maven 父 POM,提供默認的項目配置(如編碼、插件、資源處理)和依賴版本管理。
  • 核心功能
    • 依賴版本管理:通過繼承 spring-boot-dependencies,自動管理所有 Spring Boot 依賴的版本。
    • 默認配置
      • 編譯參數(如 Java 版本、編碼格式)。
      • 插件配置(如 maven-compiler-pluginspring-boot-maven-plugin)。
      • 資源處理(自動替換 application.properties 中的占位符)。
    • 標準化構建:確保多模塊項目的一致性。

1.2 spring-boot-dependencies

  • 定義
    是一個 BOM(Bill of Materials),僅管理依賴版本,不提供其他配置。
  • 核心功能
    • 版本集中控制:通過 <dependencyManagement> 聲明所有依賴的版本。
    • 兼容性保障:確保 Spring Boot 生態內依賴的版本兼容性。
    • 靈活性:可與現有父 POM 結合使用,避免替換原有配置。

1.3 核心關系圖

繼承關系
spring-boot-starter-parent
spring-boot-dependencies
版本管理
默認配置
插件配置
編碼格式
資源處理

二、核心區別對比

2.1 核心差異表

特性spring-boot-starter-parentspring-boot-dependencies
類型Maven 父 POMBOM(依賴版本清單)
作用范圍依賴版本管理 + 默認配置(插件、編碼、資源處理)僅依賴版本管理
繼承關系繼承自 spring-boot-dependencies獨立存在,不依賴其他 POM
使用方式通過 <parent> 標簽繼承通過 <dependencyManagement> + <import> 引入
是否引入依賴不直接引入依賴,但通過 BOM 管理版本僅定義版本,不引入任何依賴

2.2 關鍵關系圖

繼承
spring-boot-starter-parent
spring-boot-dependencies
版本管理
默認配置

三、使用場景與最佳實踐

3.1 spring-boot-starter-parent 的適用場景

  • 新建 Spring Boot 項目
    作為父 POM 直接繼承,快速搭建標準化項目。
    <!-- pom.xml -->
    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/> <!-- 從 Maven 倉庫獲取 -->
    </parent>
    
  • 統一配置需求
    需要統一 Java 版本、編碼、插件配置的多模塊項目。

3.2 spring-boot-dependencies 的適用場景

  • 已有父 POM 的項目
    不想替換原有父 POM,但需管理 Spring Boot 依賴版本。
    <!-- pom.xml -->
    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
    </dependencyManagement>
    
  • 靈活版本覆蓋
    需要自定義部分依賴版本時,通過 <properties> 覆蓋。
    <properties><junit-jupiter.version>5.9.3</junit-jupiter.version>
    </properties>
    

四、代碼示例與實戰

4.1 使用 spring-boot-starter-parent 的完整項目配置

<!-- pom.xml -->
<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version></parent><properties><java.version>17</java.version></properties><dependencies><!-- 自動繼承版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><!-- 內置的 spring-boot-maven-plugin 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

4.2 使用 spring-boot-dependencies 的獨立配置

<!-- pom.xml -->
<project><modelVersion>4.0.0</modelVersion><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 需要顯式指定插件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- 手動配置插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

五、高級技巧與最佳實踐

5.1 覆蓋依賴版本

spring-boot-starter-parent 中,通過 <properties> 覆蓋版本:

<properties><junit-jupiter.version>5.9.3</junit-jupiter.version><logback.version>1.2.11</logback.version>
</properties>

5.2 自定義父 POM

若需擴展功能,可創建自己的父 POM:

<!-- custom-parent/pom.xml -->
<project><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version></parent><groupId>com.example</groupId><artifactId>custom-parent</artifactId><properties><java.version>17</java.version></properties><dependencyManagement><!-- 自定義依賴版本 --></dependencyManagement>
</project>

5.3 版本沖突解決

通過 spring-boot-dependencies 確保版本一致性:

<!-- 依賴聲明 -->
<dependency><groupId>com.example</groupId><artifactId>custom-library</artifactId><version>1.0.0</version> <!-- 手動指定版本 -->
</dependency>

六、總結與選擇建議

6.1 核心總結

場景推薦方案原因
新項目快速搭建spring-boot-starter-parent提供默認配置,開箱即用
已有父 POM 的項目spring-boot-dependencies靈活管理版本,不破壞現有配置
需要完全控制配置spring-boot-dependencies自定義插件、編碼等細節

6.2 選擇建議

  • 優先使用 spring-boot-starter-parent
    當項目需要統一配置(如插件、編碼、資源處理),且無現有父 POM 限制時。
  • 選擇 spring-boot-dependencies
    當需要與現有父 POM 結合,或需自定義依賴版本時。

七、常見問題解答

7.1 為什么 spring-boot-starter-parent 需要繼承 spring-boot-dependencies

  • 原因spring-boot-starter-parent 通過繼承 spring-boot-dependencies 的 BOM,確保依賴版本的統一管理,避免版本沖突。

7.2 如何驗證依賴版本是否被正確管理?

  • 方法
    使用 mvn dependency:tree 命令查看依賴樹,確認版本是否符合預期。

八、總結

  • spring-boot-starter-parent 是“一站式”解決方案,適合快速搭建標準Spring Boot項目。
  • spring-boot-dependencies 是輕量級的依賴版本管理工具,適合需要靈活控制配置的復雜場景。
  • 關鍵關系spring-boot-starter-parent 內部已繼承 spring-boot-dependencies,因此前者包含了后者的所有功能,但額外提供了默認配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77527.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77527.shtml

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

相關文章

【MySQL】基本查詢

目錄 增加 查詢 基本查詢 where子句 結果排序 篩選分頁結果 修改(更新) 刪除 普通刪除 截斷表 插入查詢結果 聚合函數 分組查詢 這一節的內容是對表內容的增刪查改&#xff0c;其中重點是表的查詢 增加 語法&#xff1a; INSERT [INTO] table_name [(column [, …

【C++詳解】C++入門(二)引用、內聯函數、nullptr宏

文章目錄 一、引用引用的概念和定義引用的功能引用的特性const引用const用法回顧權限的放大縮小const引用的功能 指針和引用的關系 二、內聯函數三、nullptr補充結構體指針變量類型重定義 一、引用 引用的概念和定義 C祖師爺為了優化在部分場景中使用指針會出現的效率較低和比…

畢業設計-基于深度學習的實時網絡入侵檢測系統

項目技術說明 深度學習實時網絡入侵檢測系統是一種利用深度學習技術對網絡流量進行實時分析&#xff0c;以識別和阻止潛在網絡攻擊的安全解決方案。相比傳統基于規則的入侵檢測系統(IDS)&#xff0c;這種系統能夠通過學習網絡流量的正常模式和異常模式&#xff0c;更有效地檢測…

中藥企業數字化轉型:從傳統制造到智能制藥的跨越

在當今數字化浪潮下&#xff0c;中藥企業正積極擁抱變革&#xff0c;努力實現從傳統制造向智能制藥的跨越&#xff0c;以適應市場競爭和滿足人們對中藥質量與效率的更高要求。 在原料管理環節&#xff0c;企業通過采用物聯網技術&#xff0c;對中藥材種植、采集過程進行全程監…

Vue 2 的響應式 API 和 Vue 3 的組合式 API 的詳細對比,從核心機制、使用方式、代碼示例及優缺點展開

以下是 Vue 2 的響應式 API 和 Vue 3 的組合式 API 的詳細對比&#xff0c;從核心機制、使用方式、代碼示例及優缺點展開&#xff1a; 1. Vue 2 的響應式 API 核心機制 基于 Object.defineProperty&#xff1a; 通過劫持對象的 getter 和 setter 實現數據變化追蹤。限制&…

“八股訓練營”學習總結

在參加為期 40 天的八股訓練營的這段時間里&#xff0c;我收獲滿滿&#xff0c;不僅在知識技能上得到了提升&#xff0c;更在學習習慣和自我認知方面有了很大的進步。 在知識層面&#xff0c;訓練營涵蓋了網絡、數據庫、緩存以及python測試開發等多方面的知識點。 網絡方面&a…

Python對比兩張CAD圖并標記差異的解決方案

以下是使用Python對比兩張CAD圖并標記差異的解決方案&#xff0c;結合圖像處理和CAD結構分析&#xff1a; 一、環境準備與庫選擇 圖像處理庫&#xff1a;使用OpenCV進行圖像差異檢測、顏色空間轉換和輪廓分析。CAD解析庫&#xff1a;若為DXF格式&#xff0c;使用ezdxf解析實體…

記錄學習記錄學習《手動學習深度學習》這本書的筆記(九)

馬不停蹄地來到了第十二章&#xff1a;計算性能…… 感覺應該是講并行計算方面的&#xff0c;比如GPU、CPU、CUDA那些。 第十二章&#xff1a;計算性能 12.1 編譯器和解釋器 這里先提出了命令式編程和符號式編程的概念。 命令式編程VS符號式編程 目前為止&#xff0c;本書…

模板引擎語法-過濾器

模板引擎語法-過濾器 文章目錄 模板引擎語法-過濾器[toc]1.default過濾器2.default_if_none過濾器3.length過濾器4.addslashes過濾器5.capfirst過濾器6.cut過濾器7.date過濾器8.dictsort過濾器 1.default過濾器 default過濾器用于設置默認值。default過濾器對于變量的作用&…

make學習三:書寫規則

系列文章目錄 Make學習一&#xff1a;make初探 Make學習二&#xff1a;makefile組成要素 文章目錄 系列文章目錄前言默認目標規則語法order-only prerequisites文件名中的通配符偽目標 Phony Targets沒有 Prerequisites 和 recipe內建特殊目標名一個目標多條規則或多個目標共…

網絡安全技能大賽B模塊賽題解析Server12環境

已知靶機存在?站系統&#xff0c;使?Nmap?具掃描靶機端?&#xff0c;并將?站服務的端?號作為Flag &#xff08;形式&#xff1a;Flag字符串&#xff09;值提交 使用nmap掃描目標靶機網站服務的端口號為8089 Falg&#xff1a;8089 訪問?站/admin/pinglun.asp??&#…

1、Linux操作系統下,ubuntu22.04版本切換中英文界面

切換中英文界面的方法很多&#xff0c;我也是按照一個能用的方法弄過來并且記錄&#xff0c; 1.如果剛開始使用Ubuntu環境&#xff0c;桌面的語言環境為英文&#xff0c;需要安裝中文簡體的字體包 打開桌面終端&#xff0c;輸入 sudo apt install language-pack-zh-hans lan…

SmolVLM2: The Smollest Video Model Ever(六)

繼續微調 微調視頻的代碼如下&#xff1a; # 此Python文件用于對SmolVLM2進行視頻字幕任務的微調 # 導入所需的庫 import os os.environ["CUDA_VISIBLE_DEVICES"] "1" import torch from peft import LoraConfig, prepare_model_for_kbit_training, get…

Spring Boot安裝指南

&#x1f516; Spring Boot安裝指南 &#x1f331; Spring Boot支持兩種使用方式&#xff1a; 1?? 可作為常規Java開發工具使用 2?? 可作為命令行工具安裝 ?? 安裝前提&#xff1a; &#x1f4cc; 系統需安裝 Java SDK 17 或更高版本 &#x1f50d; 建議先運行檢查命令…

數據結構(七)---鏈式棧

#### 鏈式棧實現 ##### linkstack.h #ifndef _LINKSTACK_H #define _LINKSTACK_H // 引入相關的庫文件 #include <stdio.h> #include <stdlib.h> #include <string.h> // 定義元素類型的別名 typedef int DATA; //定義鏈式棧節點 typedef struct node { …

【Spring Boot】Maven中引入 springboot 相關依賴的方式

文章目錄 Maven中引入 springboot 相關依賴的方式1. 不使用版本管理&#xff08;不推薦&#xff09;2、使用版本管理&#xff08;推薦&#xff09;2.1 繼承 spring-boot-starter-parent2.2 使用 spring-boot-dependencies 自定義父工程2.3引入 spring-framework-bom Maven中引…

DataStreamAPI實踐原理——快速上手

引入 通過編程模型&#xff0c;我們知道Flink的編程模型提供了多層級的抽象&#xff0c;越上層的API&#xff0c;其描述性和可閱讀性越強&#xff0c;越下層API&#xff0c;其靈活度高、表達力越強&#xff0c;多數時候上層API能做到的事情&#xff0c;下層API也能做到&#x…

WPF 圖片文本按鈕 自定義按鈕

效果 上面圖片,下面文本 樣式 <!-- 圖片文本按鈕樣式 --> <Style x:Key="ImageTextButtonStyle" TargetType="Button"><Setter Property="Background" Value="Transparent"/><Setter Property="BorderTh…

驅動開發硬核特訓 · Day 22(上篇): 電源管理體系完整梳理:I2C、Regulator、PMIC與Power-Domain框架

&#x1f4d8; 一、電源子系統總覽 在現代Linux內核中&#xff0c;電源管理不僅是系統穩定性的保障&#xff0c;也是實現高效能與低功耗運行的核心機制。 系統中涉及電源管理的關鍵子系統包括&#xff1a; I2C子系統&#xff1a;硬件通信基礎Regulator子系統&#xff1a;電源…

設計模式全解析:23種經典設計模式及其應用

創建型模式 1. 單例模式&#xff08;Singleton Pattern&#xff09; 核心思想&#xff1a;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。適用場景&#xff1a;需要共享資源的場景&#xff0c;如配置管理、日志記錄等。 public class Singleton {// 靜態變量保存…