SpringBoot的pom.xml之依赖版本管理

目录

1、导语

2、parent做了什么事?

3、SpringBoot内部是怎么做的

3.1 官网创建版

3.2 阿里云创建版

4、小结


1、导语

  今天这篇博客主要是讲SpringBoot是如何帮我们进行依赖的版本管理的。

  首先我们打开 快速上手springBoot(IDEA联网版带图)_英杰的学习日记的博客-CSDN博客 创建好的项目,找到它的pom.xml文件,里面可以看一个parent属性,代码如下。

SpringBoot的pom.xml之依赖版本管理_第1张图片


2、parent做了什么事?

  我们在做项目的时候,避免不了的会导入一些相同的依赖比如说

Object-a:pom.xml


    org.apache.logging.log4j
    log4j-web
    2.9.1
    runtime


 
     com.lmax
     disruptor
     3.2.0
 
 

    com.baomidou
    mybatis-plus
    3.3.2

Object-b:pom.xml


    org.apache.logging.log4j
    log4j-web
    2.9.1
    runtime


 
     com.lmax
     disruptor
     3.2.0
 
 

    com.baomidou
    mybatis-plus
    3.3.2

  现在,Object-aObject-b他们都要用到这三个依赖,很正常吧,这属于常规操作。这时候有人就说了,你这东西都是一样的,还要写两份,别这么麻烦,来一份吧。

Object-gather:pom.xml


    org.apache.logging.log4j
    log4j-web
    2.9.1
    runtime


 
     com.lmax
     disruptor
     3.2.0
 
 

    com.baomidou
    mybatis-plus
    3.3.2

  合成一个pom.xml:Object-gather:pom.xml。然后Object-a:pom.xmlObject-b:pom.xmlObject-gather:pom.xml的就行了。

Object-a:pom.xml

 
    com.jie
    Object-parent 
    1.1.10

Object-b:pom.xml

 
    com.jie 
    Object-gather 
    1.1.10

  这样不就简化了么?

  哎,别急,这个管理还不太科学。

  我们把Object-gather:pom.xml里的版本和坐标都集中管理一下,一分为二!

  Object-parent:pom.xml

 
    1.1.16 
    3.5.6 
    5.1.47 

Object-gather:pom.xml


    org.apache.logging.log4j
    log4j-web
    >${log4j-web.version}
    runtime


 
     com.lmax
     disruptor
     ${disruptor.version}
 
 

    com.baomidou
    mybatis-plus
    ${mybatis-plus.version}

  我们在Object-parent:pom.xml 这个pom.xml文件中把常用的这些版本信息统一管理,写到一起,配置成Maven的属性,而Object-gather:pom.xml直接引用Object-parent:pom.xml的坐标,你看现在是不是专业了许多。

  这样做有什么好处?你以后不用管版本号的事了!版本号这种事,它来帮你管。你说这又能帮我们做多少事呢?

  太多了!以前的程序员做spring开发经常要做的一件事就是:调包。

  调什么包?做团队项目的时候,七八个技术融合在一起的时候,我们可能用的包有冲突。假如我们都用mybatis-plus,我用的是5.1.47版本,他可能用到的是5.1.40的版本,这两个技术一块导进去,好,你告诉我,到底用5.1.47还是用5.1.40,这个时候就要调。那这个过程我告诉你,搞死人的!(夸张语句修饰一下哈)。

  而现在呢?SpringBoot说,我来给你做一个全部版本统一管理,什么意思?它把所有的版本融合性给你测完了。跟你说,这几个版本放到一块是最好的,好了,以后呢版本的事你不用管了!

  以后的开发就是

SpringBoot的pom.xml之依赖版本管理_第2张图片

SpringBoot的pom.xml之依赖版本管理_第3张图片

SpringBoot的pom.xml之依赖版本管理_第4张图片

  现在大家知道parent做了什么事了吧。

  接下来让我们看看Spring Boot 到底是怎么做的呢?

3、SpringBoot内部是怎么做的

3.1 官网创建版

  让我们打开 (1条消息) 快速上手springBoot(IDEA联网版带图)_英杰的学习日记的博客-CSDN博客 所创建的SpringBoot项目,找到pom.xml文件,打开。

现在,我们要用一下servlet-api,导一下这个包。

SpringBoot的pom.xml之依赖版本管理_第5张图片

  注意一下,这里我只写groupIdartifactId了,并没有写version。现在看上图,Maven现在还没有刷新,我们刷新一下。

SpringBoot的pom.xml之依赖版本管理_第6张图片

  刷完新,大家会发现,在这里,我并没有指定版本。但是它有(4.0.1)。这个版本谁帮我们指定了?

  SpringBoot这个大管家!它帮我们指定了。问题来了,我们写的哪段代码带来的这个功能呢?

SpringBoot的pom.xml之依赖版本管理_第7张图片

  在这里我们发现这里有一个继承,就是它帮我们做的这件事!我们把鼠标放到spring-boot-starter-parent上,按住ctrl,点进去看一眼。

SpringBoot的pom.xml之依赖版本管理_第8张图片

  这里面的东西可真不少,有200多行代码,我们就看上图框起来的地方就好。这里呢它又继承了一个spring-boot-dependencies,我们再我们把鼠标放上去,按住Ctrl,点进入看看它有什么东西。

SpringBoot的pom.xml之依赖版本管理_第9张图片

  在这里我们看到了SpringBoot在这里定义了若干个坐标版本,我们找找我们的servlet-api在哪里。

快捷键Ctrl+F。

SpringBoot的pom.xml之依赖版本管理_第10张图片

    找到了,现在我们知道了前面导入的servlet-api的版本从哪里来的了。

   SpringBoot的pom.xml之依赖版本管理_第11张图片

  问题来了,我们之前导入依赖版本都要写${}来导入版本,让我们往下继续看看SpringBoot到底是怎么做的。

SpringBoot的pom.xml之依赖版本管理_第12张图片

  这里我电脑出了点问题有点红,不好意思哈)往下滑我们发现dependencyManagement,它定义了一系列的坐标依赖管理,让我们Ctrl+F搜索一下

servlet-api.version

SpringBoot的pom.xml之依赖版本管理_第13张图片

  在这里我们就找到了servlet-api.version。这里它就是引用了上面的版本。

说的就简单一点,这里面它干了什么事呢?

SpringBoot的pom.xml之依赖版本管理_第14张图片

  它在这里面定义了一系列的属性 properties ,又定义了一系列的依赖管理 dependencyManagement

  然后我们再去导入的时候就不需要管理版本了,SpringBoot这个大管家已经帮我们指定好了。

3.2 阿里云创建版

SpringBoot快速入门(阿里云版带图)_英杰的学习日记的博客-CSDN博客 这篇博客上的SpringBoot项目我们是从阿里云上下载下来的。

  打开它的pom.xml看一眼。

SpringBoot的pom.xml之依赖版本管理_第15张图片

没有parent?那怎么办,那我们的版本管理这个功能岂不是没了?NO,我们往下看。  

SpringBoot的pom.xml之依赖版本管理_第16张图片

  我们就会看到一个dependencyManagement的东西,看清楚它用的什么,它直接把spring-boot-dependencies给引用了。

  说白了,我们官网创建的,是继承了用这个东西,阿里云直接把这块东西导进来了,效果呢是完全一样的。

4、小结

        4.1 开发SpringBoot程序要继承spring-boot-starter-parent

        4.2 spring-boot-starter-parent中定义了若干个依赖管理

        4.3 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

        4.4 继承parent的形式也可以采用引入依赖的形式实现效果

你可能感兴趣的:(#,SpringBoot,xml,intellij-idea,java,spring,boot,spring)