SpringBoot中依赖管理与自动版本仲裁机制

当我们做web开发当时候,在SpringBoot中为什么只需要导入一个依赖,所有的与web开发相关的包就会全部导入进来呢?
导入web开发的依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

web开发相关的包全部都进来了:
在这里插入图片描述
在我们开发过程中无需担心任何导包问题,我们就可以直接使用了,那为什么会这样呢?

依赖管理

1.父项目

首先我们看他的父项目,每一个SpringBoot工程他都有这么一个父项目内容
例如:

    <!--父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
    </parent>

这个父项目它的作用是一般是来做依赖管理,父项目中可能会声明非常多的依赖,子项目只要基础了父项目,子项目以后写依赖就不需要版本号了,所有我们可以看到我的这个项目基础了父项目(版本号2.4.1)之后,我们之后引入其他依赖,我们都没有写版本号,如下:


    <!--父项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
    </parent>

    <!--web插件-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>


    <!--简化部署,把项目打成jar包,直接在目标服务器执行即可。-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

所以父项目是用来做依赖管理的。

2.自动版本仲裁机制

在这里插入图片描述

我们点进父项目查看其内容,内容如下:
在这里插入图片描述

发现呢它还有一个父项目,我们继续点进去查看其内容,部分截图如下:

在这里插入图片描述

在这里插入图片描述

可以看到里面声明了我们开发过程中需要用到的所有常用jar包的版本号和依赖,也就是说我们在spring-boot-dependencies里面声明了很多jar包的版本号和依赖,所以我们无需写版本号,这就是自动版本仲裁机制。

扫描二维码关注公众号,回复: 12165915 查看本文章

3.如何不使用版本仲裁机制所提供的版本号

在这里插入图片描述

比如我们不想使用默认提供的mysql驱动的版本号8.0.22,想用版本号为5.1.47的mysql,那我们应该怎么办呢?
有两个解决方案,其实都是利用maven提供的特性,就近优先原则,如下:

a.使用<properties>

在这里插入图片描述
之后我们可以看到mysql驱动已经导入其版本号为5.1.47,截图如下:
在这里插入图片描述

b.直接在导入依赖的时候直接加上版本号

在这里插入图片描述
这两种方法其实都是利用maven提供的特性,就近优先原则,就是在当前项目中已经配置了某个依赖的版本号我就使用其版本号,如果当前项目中没有配置其版本号,我就去其父项目中找其版本号。

猜你喜欢

转载自blog.csdn.net/MrYushiwen/article/details/111866287