美文网首页mavenSpring-BootJavaWeb 知识点
SpringBoot通过maven引入的jar包为什么有的没有版

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

作者: jwfy | 来源:发表于2018-08-05 12:11 被阅读23次

    之前学习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 学习

    相关文章

      网友评论

        本文标题:SpringBoot通过maven引入的jar包为什么有的没有版

        本文链接:https://www.haomeiwen.com/subject/rfkbvftx.html