mavenSpring-BootJavaWeb 知识点

SpringBoot通过maven引入的jar包为什么有的没有版

2018-08-05  本文已影响23人  jwfy

之前学习maven知道,在通过maven引入jar包的时候,需要明确定义其坐标元素groupId、artifactId、version、packaging、classfier,从而确认具体的jar包信息,其中groupId、artifactId、version三要素一定不可缺失,可是有些POM中却没有引入包版本,却可以正常运行,例如下图,那么是为什么呢?

image

我们猜测肯定是有哪个地方有明确的包版本说明,要不然就违背了Maven的规则
其实在springboot的官方文档中也有具体解释这个没有设置包版本的原因,具体可看==>Spring Boot Docs

接下来我们具体分析下其真正的原因

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包
更多maven的知识可以看看maven 学习

上一篇 下一篇

猜你喜欢

热点阅读