深入起步依赖(以spring-boot-starter-web为例)

深入起步依赖(以spring-boot-starter-web为例)

  • 1. 引入POM依赖
  • 2. POM文件剖析
    • 2.1 Spring boot 1.5.9.RELEASE的POM文件解析
    • 2.2 Spring boot 2.1.5.RELEASE的POM文件解析
  • 3. 替换tomcat服务器为jetty
  • 4. spring-boot-starter-web的pom文件中的依赖配置(2.1.5.RELEASE)
  • 参考

1. 引入POM依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
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结构而言:结构更为清晰,职责更为明确、很好的体现了单一职责原则。

  1. 将所有的依赖管理和插件管理统一到spring-boot-dependencies中进行管理
  2. 取消spring-boot-starters 聚合pom的职责,只作为简单的起步依赖的父pom存在
  3. spring-boot仅用于配置spring boot的公共依赖
  4. 将所有仅用于构建使用的(scope为option)的依赖集中到spring-boot-autoconfigure中
  5. 依赖的版本配置下沉,一些只跟具体起步依赖相关的依赖的版本配置由起步依赖自己定义

2.1 Spring boot 1.5.9.RELEASE的POM文件解析

深入起步依赖(以spring-boot-starter-web为例)_第1张图片

2.2 Spring boot 2.1.5.RELEASE的POM文件解析

深入起步依赖(以spring-boot-starter-web为例)_第2张图片

3. 替换tomcat服务器为jetty

spring-boot-starter-web起步依赖默认的应用服务器是tomcat,如果想使用jetty作为应用服务器应该怎么做呢?很简单,只需要更改下配置文件即可。

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jettyartifactId>
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.bootgroupId>
      <artifactId>spring-boot-starterartifactId>
      <version>2.1.5.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-jsonartifactId>
      <version>2.1.5.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-tomcatartifactId>
      <version>2.1.5.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.hibernate.validatorgroupId>
      <artifactId>hibernate-validatorartifactId>
      <version>6.0.16.Finalversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webartifactId>
      <version>5.1.7.RELEASEversion>
      <scope>compilescope>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>5.1.7.RELEASEversion>
      <scope>compilescope>
    dependency>
  dependencies>

参考

SpringBoot使用jetty服务器启动
Jetty 9.4.7 Released!

你可能感兴趣的:(Spring,Boot)