Spring Boot 基本配置之依赖管理starter pom
在SpringBoot快速搭建中搭建了一个没有任何功能的项目,查看其pom.xml文件:
项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter。仔细观察可知spring-boot-starter-parent中有版本号,而spring-boot-starter中午版本号。实际在后续开发中都不用在依赖中添加版本号了,为什么呢?
使用“Ctrl+鼠标左键”进入并查看spring-boot-starter-parent底层源文件,先看spring-boot-starter-parent做了哪些事。
spring-boot-starter-parent 定义了: 1. 工程的Java版本为 17 ;
2. 工程代码的编译源文件编码格式为 UTF-8 ;
3. 工程编译后的文件编码格式为 UTF-8;
4. Maven打包编译的版本。
继续研究build节点部分,也定义了相关内容版本(不另外上图了)。
再继续看spring-boot-starter-parent的父依赖 spring-boot-dependencies,方式同进入spring-boot-starter-parent一样:
如上图所示这个才是SpringBoot项目的真正管理依赖的项目,里面定义了SpringBoot相关的版本。
如上图示:dependencies定义了SpringBoot版本的依赖的组件以及相应版本。
spring-boot-starter-parent 通过继承 spring-boot-dependencies 从而实现了SpringBoot的版本依赖管理,所以自定义的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了,这也就是在 Spring Boot 项目中部分依赖不需要写版本号的原因啦。
那项目运行依赖的JAR包是从何而来的?以SpringBoot快速搭建中使用的spring-boot-starter-web为例分析——在本地仓库中查看其依赖文件,找到其依赖代码如下图:
可知spring-boot-starter-web依赖启动器的主要作用是打包了Web开发场景所需的底层所有依赖(基于依赖传递,当前项目也存在对应的依赖jar包)。
当然官方提供了更多的starter pom,同时除了官方提供的,第三方也可以提供。区别二者可以通过约定的规则:命名starter在前为官方提供,starter在最后为第三方提供。