spring-boot-starter-parent和spring-boot-dependencies介紹

springboot項目的pom文件中,我們經常看見這樣(下圖)兩種springboot的版本依賴管理方式;圖片中的這兩種依賴聲明方式任意用其中一種都可以。文章后面會簡單闡述一下區別和使用場景。

事例中完整的pom文件

<?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.zhh.platform</groupId><artifactId>demo2</artifactId><version>0.0.1-SNAPSHOT</version><name>demo2</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 聲明依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><!-- 聲明依賴 --><!--    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zhh.platform.Demo2Application</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

1. 兩者的區別和作用

?spring-boot-starter-parent繼承了spring-boot-dependencies,打開spring-boot-starter-parent的pom文件就能看見他的父級就是spring-boot-dependencies,不過他多了一些配置,比如配置了UTF-8編碼格式,如果我們繼承了spring-boot-starter-parent,就可以不用再配置編碼格式,否則還是需要配置一下

下面是spring-boot-dependencies的pom文件部分截圖

他提供了相關的默認版本依賴,使用它之后,常用的包依賴可以省去version標簽,例如:

在使用過程中,如果用的是spring-boot-starter-parent,一般會把他寫在parent標簽中;如果用的是spring-boot-dependencies,一般會把他寫在dependencyManagement標簽中,例如:

    <!-- 聲明依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><!-- 兩者選擇其一,另一個注釋掉 --><!-- 聲明依賴 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

其實反過來寫也可以,不過還是不要獨行特立,例如:

    <!-- 聲明依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version></parent><!-- 兩者選擇其一,另一個注釋掉 --><!-- 聲明依賴 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

上面說到了兩種聲明父依賴的方式分別是在<parent>標簽和<dependencyManagement>標簽中聲明,有什么區別呢?

2.?parent標簽和dependencyManagement標簽中聲明父依賴的區別

<parent>標簽只支持單繼承,如果需要多個父級,就需要用到dependencyManagement標簽。

假如我們現在要添加 spring-boot-starter-web 依賴,我們是不需要聲明版本的,

但是如果現在我們需要添加 spring-cloud-starter-gateway 依賴,你會發現,如果不聲明版本根本就不行,因為spring-cloud-starter-gateway是springCloud的相關依賴,他在spring-boot-starter-parent的父級spring-boot-dependencies中根本就沒有對應的版本聲明,這個時候如果不想自己聲明版本,就需要在dependencyManagement標簽中添加spring-cloud-dependencies的聲明,spring-cloud-dependencies的pom文件中聲明了springcloud相關依賴的版本

在使用過程中,如果需要多個父依賴,就需要用到dependencyManagement標簽,可以一個父依賴在parent標簽中,其他的父依賴在dependencyManagement標簽中,也可以都在dependencyManagement標簽中。

如果只有一個父依賴,可以在dependencyManagement標簽中聲明,也可以在parent標簽中聲明。

隨便理一下dependencyManagement標簽和dependencies標簽的區別

a.dependencyManagement標簽

dependencyManagement標簽可以理解成一個maven中的依賴管理器,他只聲明不引入。在maven多模塊項目(父子工程)中,一般都是在dependencyManagement標簽中聲明所有需要的依賴,然后子模塊中只需要添加相應的groupId和artifactId即可,并不需要聲明版本號。這樣做的目的是為了方便jar包版本的統一管理,如果需要修改jar依賴的版本,只需要修改父pom一個地方即可。
?

b. dependencies標簽
?

dependencies標簽中引入了一個jar包之后,如果沒有加上version版本號的話,那么maven就會去<dependencyManagement>里找對應groupId和artifactId的聲明并使用對應的版本號,先在當前pom文件的dependencyManagement標簽中找,如果沒有,就到父模塊的dependencyManagement標簽中找,都沒有就報錯。

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

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

相關文章

阿爾卡特Adixen ADP/ADS 系列 2 干泵使用說明

阿爾卡特Adixen ADP/ADS 系列 2 干泵使用說明

HTML教程(3)——常用標簽(1)

一、圖片標簽 1.場景&#xff1a;在網頁中顯示圖片 2.基本寫法&#xff1a; <img src""> 3.特點&#xff1a;單標簽&#xff0c;img標簽需要展示對應的效果&#xff0c;需要借助其屬性進行設置 4常用屬性&#xff1a; src&#xff1a;其屬性值為目標圖片…

【框架】Spring 框架重點解析

Spring 框架重點解析 1. Spring 框架中的單例 bean 是線程安全的嗎&#xff1f; 不是線程安全的 Spring 框架中有一個 Scope 注解&#xff0c;默認的值是 singleton&#xff0c;即單例的&#xff1b;因為一般在 Spring 的 bean 對象都是無狀態的&#xff08;在生命周期中不被…

解決Mybatis報Type interface *.*Mapper is not known to the MapperRegis

解決Mybatis報Type interface *.*Mapper is not known to the MapperRegis 問題發現問題解決方法一&#xff1a;檢查Mapper文件的namespace路徑是否正確方法二&#xff1a;使用其他方法是否正確 問題發現 在學習MyBatis框架的時候&#xff0c;不使用 XML 構建 SqlSessionFacto…

字符串函數 sscanf() 詳解

什么是 sscanf() 函數&#xff1f; sscanf() 函數是 C 語言中的一個標準庫函數&#xff0c;它的作用是從一個字符串中按照指定的格式提取數據&#xff0c;并將其存儲到對應的變量中。它的原型如下&#xff1a; int sscanf(const char *str, const char *format, ...);其中&am…

Project_Euler-44 題解

Project_Euler-44 題解 題目 思路 題目給出了一個性質&#xff0c;讓我在對應性質的數據中找出目標值&#xff0c;這種問題首先想到的就是枚舉。 我們可以枚舉 P k P_k Pk? &#xff0c;對于每一個 P k P_k Pk? &#xff0c;我們再枚舉 P j P_j Pj?&#xff0c; P j P_…

【ue5】滑鏟系統藍圖筆記

大致邏輯如下&#xff1a; 一、導入動畫 滑鏟蹲待機蹲行走 導入到文件夾中 可以右鍵設置顏色&#xff0c;便于區分。 二、調整動畫 1.啟動根運動 啟動根運動后&#xff0c;人物才可以位移&#xff0c;不然只能在原地。 打開動畫序列&#xff0c;勾選啟用根運動Enabled…

用node或者vscode開啟一個簡單的本地server服務器,加載html網頁

使用Live Server 想要加載本地html頁面可以快速能讓它在你本地瀏覽器中打開&#xff0c;可以有好多種方式&#xff0c;如果你有使用vscode&#xff0c;可以安裝一個插件&#xff1a;Live Server&#xff0c;然后直接在vscode中直接右鍵就可以開啟這個服務&#xff1a; 安裝好之…

C++基于多設計模式下的同步異步日志系統day2

&#x1f4df;作者主頁&#xff1a;慢熱的陜西人 &#x1f334;專欄鏈接&#xff1a;C基于多設計模式下的同步&異步日志系統 &#x1f4e3;歡迎各位大佬&#x1f44d;點贊&#x1f525;關注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要內容實現了日志代碼設計的實…

在 Spring Boot 3.x 中使用 SpringDoc 2 / Swagger V3

SpringDoc V1 只支持到 Spring Boot 2.x springdoc-openapi v1.7.0 is the latest Open Source release supporting Spring Boot 2.x and 1.x. Spring Boot 3.x 要用 SpringDoc 2 / Swagger V3, 并且包名也改成了 springdoc-openapi-starter-webmvc-ui SpringDoc V2 https://s…

select,poll和epoll有什么區別

它們都是NIO中多路復用的三種實現機制&#xff0c;是由linux操作系統提供的。 用戶空間和內核空間&#xff1a;操作系統為了保證系統安全&#xff0c;將內核分為兩個部分&#xff0c;一個是用戶空間&#xff0c;一個是內核空間。用戶空間不能直接訪問底層的硬件設備&#xff0…

IT廉連看——Uniapp——配置文件pages

IT廉連看——Uniapp——配置文件pages [IT廉連看] 本堂課主要為大家介紹pages.json這個配置文件 一、打開官網查看pages.json可以配置哪些屬性。 下面邊寫邊講解 新建一個home頁面理解一下這句話。 以下一些頁面的通用配置 通用設置里我們可以對導航欄和狀態欄進行一些設…

Android修行手冊-集成Python開發環境

Unity3D特效百例案例項目實戰源碼Android-Unity實戰問題匯總游戲腳本-輔助自動化Android控件全解手冊再戰Android系列Scratch編程案例軟考全系列Unity3D學習專欄藍橋系列ChatGPT和AIGC &#x1f449;關于作者 專注于Android/Unity和各種游戲開發技巧&#xff0c;以及各種資源分…

Debezium發布歷史161

原文地址&#xff1a; https://debezium.io/blog/2023/09/13/debezium-2-4-beta2-released/ 歡迎關注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻譯&#xff0c;僅供參考&#xff0c;筆芯筆芯. Debezium 2.4.0.Beta2 Released September 13, 2023 by Chris Cranfo…

Apache Flink連載(三十五):Flink基于Kubernetes部署(5)-Kubernetes 集群搭建-1

?? 個人主頁:IT貧道-CSDN博客 ?? 私聊博主:私聊博主加WX好友,獲取更多資料哦~ ?? 博主個人B棧地址:豹哥教你學編程的個人空間-豹哥教你學編程個人主頁-嗶哩嗶哩視頻 目錄 ?編輯

Python爬蟲——Urllib庫-2

編解碼 問題引入 例如&#xff1a; https://www.baidu.com/s?wd章若楠 https://www.baidu.com/s?wd%E7%AB%A0%E8%8B%A5%E6%A5%A0 第二部分的一串亂碼就是章若楠 如果這里是寫的章若楠就會 產生這樣的錯誤 所以我們就可以使用get請求方式的quote方法了 get請求方式的q…

laravel ApiResponse接口統一響應封裝

一&#xff0c;新增接口返回碼配置文件 在config中新增配置文件apicode.php <?phpreturn [ apicodes>[/*** Message("OK")* 對成功的 GET、PUT、PATCH 或 DELETE 操作進行響應。也可以被用在不創建新資源的 POST 操作上*/HTTP_OK > 200,/*** Message(&qu…

使用el-form之表單校驗自動定位到報錯位置問題,,提升用戶體驗

需求描述 由于需要填寫的表單項太多&#xff0c;提交的時候校驗不通過&#xff0c; 如果沒填寫的表單項在最上面&#xff0c;用戶看不到不知道發生了啥&#xff0c; 所以需要將頁面滾動定位到第一個報錯的表單項位置&#xff0c;提升用戶體驗實現步驟 1. 給form表單添加ref …

數據中心GPU集群高性能組網技術分析

數據中心GPU集群組網技術是指將多個GPU設備連接在一起&#xff0c;形成一個高性能計算的集群系統。通過集群組網技術&#xff0c;可以實現多個GPU設備之間的協同計算&#xff0c;提供更大規模的計算能力&#xff0c;適用于需要大規模并行計算的應用場景。 常用的組網技術&…

1209. 帶分數 刷題筆記

思路 暴力匹配 讀入目標數 n 看n是否與ab/c相等 因為c里面的除法是整除 我們將 nab/c 轉換為 c*na*cb 那么如何獲得a,b&#xff0c;c 依題意 a&#xff0c;b&#xff0c;c三個數由1-9九個數字組成 且每個數字只能出現一次 由此 我們可以搜出123456789的全部排列方式…