深入起步依赖(以spring-boot-starter-web为例)
1. 引入POM依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. POM文件剖析
起步依赖的核心就是对pom文件的配置优化。Spring boot版本升级的过程也是一个pom配置不断优化的过程。
Spring boot所有的jar包中,只有spring-boot和spring-boot-autoconfigure两个jar包里是有java代码的,其余的jar包全都是pom文件。It’s amazing!
pom文件 | 描述 | 1.5.9.RELEASE | 2.1.5.RELEASE |
---|---|---|---|
spring-boot-dependencies | 依赖包的版本进行统一管理 | 依赖管理、插件管理 | 依赖管理、插件管理 |
spring-boot-parent | 所有Spring boo包的父pom | 依赖管理、依赖、插件管理、插件 | 无依赖、插件相关配置 |
spring-boot-starters | 所有起步依赖父pom | 聚合pom,包含所有起步依赖 | 非聚合pom |
spring-boot | 所有起步依赖的公共依赖包 | 包含多个optional和test范围的依赖 | 只包含sprng boot公共依赖,无option、test范围依赖 |
spring-boot-autoconfigure | 自动配置实现包,所有的自动配置类都可以在此包中找到 | 包含多个optional和test范围的依赖 | 包含多个option范围依赖、无test范围依赖 |
2.1.5-RELEASE版本较1.5.9.RELEASE版本的pom结构而言:结构更为清晰,职责更为明确、很好的体现了单一职责原则。
- 将所有的依赖管理和插件管理统一到spring-boot-dependencies中进行管理
- 取消spring-boot-starters 聚合pom的职责,只作为简单的起步依赖的父pom存在
- spring-boot仅用于配置spring boot的公共依赖
- 将所有仅用于构建使用的(scope为option)的依赖集中到spring-boot-autoconfigure中
- 依赖的版本配置下沉,一些只跟具体起步依赖相关的依赖的版本配置由起步依赖自己定义
2.1 Spring boot 1.5.9.RELEASE的POM文件解析
2.2 Spring boot 2.1.5.RELEASE的POM文件解析
3. 替换tomcat服务器为jetty
spring-boot-starter-web起步依赖默认的应用服务器是tomcat,如果想使用jetty作为应用服务器应该怎么做呢?很简单,只需要更改下配置文件即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
需要注意jetty版本跟jdk版本的兼容性问题,如果默认的jetty版本要求较高的jdk版本,可以考虑降低jetty版本。(Spring boot 1.5.9.RELEASE中有这个问题,2.1.5.RELEASE版本中没有这个问题)
4. spring-boot-starter-web的pom文件中的依赖配置(2.1.5.RELEASE)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.1.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.1.5.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.7.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.7.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>