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

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>

web开发相关的包全部都进来了:
SpringBoot中依赖管理与自动版本仲裁机制_第1张图片
在我们开发过程中无需担心任何导包问题,我们就可以直接使用了,那为什么会这样呢?

依赖管理

1.父项目

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

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.4.1version>
    parent>

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


    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.4.1version>
    parent>

    
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    dependencies>


    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

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

2.自动版本仲裁机制

SpringBoot中依赖管理与自动版本仲裁机制_第2张图片

我们点进父项目查看其内容,内容如下:
SpringBoot中依赖管理与自动版本仲裁机制_第3张图片

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

SpringBoot中依赖管理与自动版本仲裁机制_第4张图片

SpringBoot中依赖管理与自动版本仲裁机制_第5张图片

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

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

SpringBoot中依赖管理与自动版本仲裁机制_第6张图片

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

a.使用

SpringBoot中依赖管理与自动版本仲裁机制_第7张图片
之后我们可以看到mysql驱动已经导入其版本号为5.1.47,截图如下:
SpringBoot中依赖管理与自动版本仲裁机制_第8张图片

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

SpringBoot中依赖管理与自动版本仲裁机制_第9张图片
这两种方法其实都是利用maven提供的特性,就近优先原则,就是在当前项目中已经配置了某个依赖的版本号我就使用其版本号,如果当前项目中没有配置其版本号,我就去其父项目中找其版本号。

你可能感兴趣的:(SpringBoot,java,spring,boot,maven,依赖管理,版本仲裁)