之前學習maven知道勋拟,在通過maven引入jar包的時候,需要明確定義其坐標元素groupId蜘矢、artifactId、version综看、packaging品腹、classfier,從而確認具體的jar包信息红碑,其中groupId舞吭、artifactId、version三要素一定不可缺失句喷,可是有些POM中卻沒有引入包版本镣典,卻可以正常運行,例如下圖唾琼,那么是為什么呢兄春?
我們猜測肯定是有哪個地方有明確的包版本說明,要不然就違背了Maven的規(guī)則
其實在springboot的官方文檔中也有具體解釋這個沒有設置包版本的原因锡溯,具體可看==>Spring Boot Docs
接下來我們具體分析下其真正的原因
如上圖赶舆,可以看到spring-boot-starter-tomcat是依賴自spring-boot-starters父maven的,其dependency中并沒有明確的具體的jar包信息
如下圖祭饭,再看spring-boot-starters包芜茵,其父maven是spring-boot-parent
如下圖spring-boot-parent的父pom是spring-boot-dependencies,看到這里通過名字應該很清楚在spring-boot-dependencies中肯定包含了大部分默認的jar包版本約定
如下圖的spring-boot-dependencies倡蝙,并沒有父POM
從上圖可以看出在spring-boot-dependencies中利用dependencyManagement管理了所有的jar包
現在也知道了spring-boot-starter-tomcat中的Tomcat版本是8.5.15
dependencyManagement 和 dependencys 有什么區(qū)別么九串?
主要的區(qū)別在于被dependencyManagement引入的jar包在子POM中不一定會引入,除非子類明確引入了才可以使用寺鸥,而dependencys引入的jar包無論子POM是否有使用到都會引入進去的猪钮,這樣可以做到避免引入沒必要的jar包
更多maven的知識可以看看maven 學習