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

目录

1、导语

2、parent做了什么事?

3、SpringBoot内部是怎么做的

3.1 官网创建版

3.2 阿里云创建版

4、小结


1、导语

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

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


2、parent做了什么事?

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

Object-a:pom.xml

<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

<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

<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

<dependency> 
    <groupId>com.jie</groupId>
    <artifactId>Object-parent</artifactId> 
    <version>1.1.10</version>
</dependency>

Object-b:pom.xml

<dependency> 
    <groupId>com.jie</groupId> 
    <artifactId>Object-gather</artifactId> 
    <version>1.1.10</version>
</dependency>

  这样不就简化了么?

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

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

  Object-parent:pom.xml

<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

<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,导一下这个包。

  注意一下,这里我只写groupIdartifactId了,并没有写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的形式也可以采用引入依赖的形式实现效果

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[8\]:pom.xml文件详解。pom.xml文件是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。在Spring Boot项目中,pom.xml文件也扮演着重要的角色。在pom.xml文件中,可以配置项目的资源文件。 在Spring Bootpom.xml文件中,通常会有一个<resources>标签,用于配置项目的资源文件。资源文件可以包括静态文件、配置文件等。在<resources>标签中,可以使用<resource>标签来指定资源文件的路径和过滤规则。 例如,可以使用以下配置来指定资源文件的路径和过滤规则: ```xml <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> ``` 上述配置中,<directory>标签指定了资源文件的路径为src/main/resources,<includes>标签指定了需要包含的资源文件的过滤规则。在这个例子中,所有的.properties和.xml文件都会被包含在项目的资源文件中。 通过配置pom.xml文件中的<resources>标签,可以方便地管理项目的资源文件,使其能够在项目中正确地被加载和使用。 #### 引用[.reference_title] - *1* *3* [SpringBoot入门pom.xml文件详解,Resources目录结构详解,Springboot创建项目,注解详解等等,博主为很少人](https://blog.csdn.net/m0_52789121/article/details/124038257)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot入门pom.xml文件详解,Resources目录结构详解,Springboot创建项目,注解详解等等,博主为很少人...](https://blog.csdn.net/qq_38101814/article/details/91044906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我阿杰好了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值