当我们做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.自动版本仲裁机制
2.自动版本仲裁机制
我们点进父项目查看其内容,内容如下:
发现呢它还有一个父项目,我们继续点进去查看其内容,部分截图如下:
可以看到里面声明了我们开发过程中需要用到的所有常用jar包的版本号和依赖,也就是说我们在spring-boot-dependencies里面声明了很多jar包的版本号和依赖,所以我们无需写版本号,这就是自动版本仲裁机制。
3.如何不使用版本仲裁机制所提供的版本号
3.如何不使用版本仲裁机制所提供的版本号
比如我们不想使用默认提供的mysql驱动的版本号8.0.22,想用版本号为5.1.47的mysql,那我们应该怎么办呢?
有两个解决方案,其实都是利用maven提供的特性,就近优先原则,如下:
a.使用<properties>
a.使用<properties>
之后我们可以看到mysql驱动已经导入其版本号为5.1.47,截图如下:
b.直接在导入依赖的时候直接加上版本号
b.直接在导入依赖的时候直接加上版本号
这两种方法其实都是利用maven提供的特性,就近优先原则,就是在当前项目中已经配置了某个依赖的版本号我就使用其版本号,如果当前项目中没有配置其版本号,我就去其父项目中找其版本号。