SpringBoot透過maven引入的jar包為什麼有的沒有版本號

piny發表於2021-09-09

之前學習maven知道,在透過maven引入jar包的時候,需要明確定義其座標元素groupId、artifactId、version、packaging、classfier,從而確認具體的jar包資訊,其中groupId、artifactId、version三要素一定不可缺失,可是有些POM中卻沒有引入包版本,卻可以正常執行,例如下圖,那麼是為什麼呢?

圖片描述

image

我們猜測肯定是有哪個地方有明確的包版本說明,要不然就違背了Maven的規則
其實在springboot的官方文件中也有具體解釋這個沒有設定包版本的原因,具體可看==>

接下來我們具體分析下其真正的原因

圖片描述

image

如上圖,可以看到spring-boot-starter-tomcat是依賴自spring-boot-starters父maven的,其dependency中並沒有明確的具體的jar包資訊

如下圖,再看spring-boot-starters包,其父maven是spring-boot-parent

圖片描述

image

如下圖spring-boot-parent的父pom是spring-boot-dependencies,看到這裡透過名字應該很清楚在spring-boot-dependencies中肯定包含了大部分預設的jar包版本約定

圖片描述

image

如下圖的spring-boot-dependencies,並沒有父POM

圖片描述

圖片描述圖片描述

image

圖片描述

image


圖片描述

image

從上圖可以看出在spring-boot-dependencies中利用dependencyManagement管理了所有的jar包
現在也知道了spring-boot-starter-tomcat中的Tomcat版本是8.5.15

dependencyManagement 和 dependencys 有什麼區別麼?
主要的區別在於被dependencyManagement引入的jar包在子POM中不一定會引入,除非子類明確引入了才可以使用,而dependencys引入的jar包無論子POM是否有使用到都會引入進去的,這樣可以做到避免引入沒必要的jar包



作者:jwfy
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3034/viewspace-2811676/,如需轉載,請註明出處,否則將追究法律責任。

相關文章