前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot的pom.xml之依赖版本管理

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

作者头像
叫我阿杰好了
发布2022-11-07 13:18:45
2.1K0
发布2022-11-07 13:18:45
举报
文章被收录于专栏:MyBatis-Plus一切总会归于平淡

目录

1、导语

2、parent做了什么事?

3、SpringBoot内部是怎么做的

3.1 官网创建版

3.2 阿里云创建版

4、小结


1、导语

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

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


2、parent做了什么事?

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

Object-a:pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.9.1</version>
    <scope>runtime</scope>
</dependency>

 <dependency>
     <groupId>com.lmax</groupId>
     <artifactId>disruptor</artifactId>
     <version>3.2.0</version>
 </dependency>
 
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.3.2</version>
</dependency>

Object-b:pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.9.1</version>
    <scope>runtime</scope>
</dependency>

 <dependency>
     <groupId>com.lmax</groupId>
     <artifactId>disruptor</artifactId>
     <version>3.2.0</version>
 </dependency>
 
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.3.2</version>
</dependency>

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

Object-gather:pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.9.1</version>
    <scope>runtime</scope>
</dependency>

 <dependency>
     <groupId>com.lmax</groupId>
     <artifactId>disruptor</artifactId>
     <version>3.2.0</version>
 </dependency>
 
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.3.2</version>
</dependency>

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

Object-a:pom.xml

代码语言:javascript
复制
<dependency> 
    <groupId>com.jie</groupId>
    <artifactId>Object-parent</artifactId> 
    <version>1.1.10</version>
</dependency>

Object-b:pom.xml

代码语言:javascript
复制
<dependency> 
    <groupId>com.jie</groupId> 
    <artifactId>Object-gather</artifactId> 
    <version>1.1.10</version>
</dependency>

  这样不就简化了么?

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

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

  Object-parent:pom.xml

代码语言:javascript
复制
<properties> 
    <log4j-web.version>1.1.16</druid.version> 
    <disruptor.version>3.5.6</mybatis.version> 
    <mybatis-plus.version>5.1.47</mysql.version> 
</propperties>

Object-gather:pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>>${log4j-web.version}</version>
    <scope>runtime</scope>
</dependency>

 <dependency>
     <groupId>com.lmax</groupId>
     <artifactId>disruptor</artifactId>
     <version>${disruptor.version}</version>
 </dependency>
 
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

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

  以后的开发就是

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

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

3、SpringBoot内部是怎么做的

3.1 官网创建版

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

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

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

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

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

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

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

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

快捷键Ctrl+F。

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

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

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

servlet-api.version

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

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

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

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

3.2 阿里云创建版

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

  打开它的pom.xml看一眼。

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

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

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

4、小结

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、导语
  • 2、parent做了什么事?
  • 3、SpringBoot内部是怎么做的
    • 3.1 官网创建版
      • 3.2 阿里云创建版
      • 4、小结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档