Spring Boot2(004):关于 Build Systems (构建系统)

  Spring Boot Ref 建议使用 maven 或者 gradle 来进行依赖管理和应用构建。

一、Dependency Management(依赖管理)

  Spring Boot 的每个版本都会有相应的依赖包支持版本列表,我们开发时通常可以不用关注这些依赖配置(当然也可以根据需要进行指定),Spring Boot 本身会自己进行管理,而且在对 spring boot 进行版本升级时相关的依赖版本也会跟着一致升级。而这个依赖包支持版本列表(包括 spring 模块和第三方依赖包)可以在 BOM (Bills of Materials,物料清单,这个翻译有点怪) 中查找到,BOM 可用于 mavengradle

  注意:Spring Boot 的每个版本都会与一个基本的 Spring Framework 版本关联,建议使用默认。

二、Maven

  Maven 用户可以通过继承 spring-boot-starter-parent 来获得预设配置,它提供了如下特性:

    • 默认编译级别是 Java 1.8
  • 默认 UTF-8 编码
  • 获得继承自 spring-boot-dependencies pom 的依赖管理清单,里面维护了通用依赖的版本,当我们在自己的 pom 中需要使用这些依赖时,可以忽略版本 <version> 项的配置,这时候会使用默认配置。
  • 预设的资源过滤(resource filtering:maven-resources-plugin)
  • 预设的 plugin 配置(exec plugin, Git commit ID, and shade:exec-maven-plugin、maven-git-commit-id-plugin、maven-shade-plugin)
  • 预设的资源文件过滤,application.propertiesapplication.yml等,还包括特定配置文件(例如:application-dev.propertiesapplication-dev.yml

1、通过继承 Starter Parent 来使用spring boot

  在 pom.xml 中设置 parent 即可:

<!-- Inherit defaults from Spring Boot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>

   如果想要设定依赖包的版本,可以覆盖掉,例如,将 spring-data-releasetrain 设置为 Fowler-SR2

<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

   至于有哪些依赖,springboot v2.1.5.RELEASE 可以参考这里:https://github.com/spring-projects/spring-boot/tree/v2.1.5.RELEASE/spring-boot-project/spring-boot-dependencies/pom.xml

2、不通过 Parent Pom 来使用 spring boot

  通过继承 spring-boot-starter-parent 来使用 spring boot 很方便,基本上不再需要自己声明相关的 jar 依赖。当然,如果开发项目时有内部的规定或者约束来指定其他的(比如内部的)标准 parent,或者更愿意显示指定依赖的话,也可以不继承 spring-boot-starter-parent

  不继承使用 spring-boot-starter-parent 时,如果还想利用 springboot 提供的 dependency management (不是 plugin management),可以通过配置 scope=import 的依赖来进行管理;如下:

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

   上面的例子同样会在帮你引入默认的版本配置,如果还是需要显式指定其他的 jar 依赖版本,需要在 spring-boot-dependencies 配置之前添加,比如,这里想指定 spring-data-releasetrain 的版本为 Fowler-SR2 ,需要进行如下配置:

<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

   注:上面的例子中,我们只是指定了 BOM (Bills of Materials),任何依赖配置可以被覆盖重写。

3、使用Spring Boot Maven Plugin 插件来生成可执行的 jar 包

  springboot 包含一个 maven 插件用于将工程打包成一个可执行的 jar 包(an executable jar),只需要在 pom.xml<plugins> 中添加如下配置即可

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

   注:使用 Spring Boot starter parent pom 时,只需要加入上面的配置即可打包可执行的 jar 包。

三、关于 Starters

  Starters(启动器)是比较方便的一组依赖关系描述符,开发者可以将其包含在应用程序中。通过 Starters 可以获得 Spring 全家桶及相关技术的一站式服务,而不必自己进行依赖管理。例如,如果想入手使用 Spring 和 JPA 进行数据库访问,在项目中包含 spring-boot-starter-data-jpa 依赖项即可。

  打个比方,Starters 就类似于一台完整的台式机,把常见的 spring 应用所需要的相关 jar 包进行了汇总维护,开箱即用,而不需要我们一个组件一个组件辛苦地找,比如CPU、内存条、硬盘、显卡等等,而且各个型号都要对上,类似于找各种 jar 包,然后版本号也要对上,然后再组装成完整的台式机来用,我们只需要使用 Starters 这个组装好的台式机,这些依赖项就都加进来了,就能快速启动和运行项目。同样,组装好的台式机是有预设的配置的,但是如果想要修改台式机中某项配置,也是可以直接更换的,但是型号(版本)要对得上才行,不过不管怎样,还是推荐原厂默认配置。

  题外:关于 Starters 的命名,spring 官方提供的都是类似于 spring-boot-starter-*,* 一般表示特定的应用,这种命名方式可以方便开发者找到相关的 starters。而对于第三方的 starters ,不建议使用 spring-boot 开头,因为这是保留给 springboot 官方使用的,通常建议使用工程名称开头,比如有个第三方 starters 工程名称为 thirdpartyproject,则通常使用 thirdpartyproject-spring-boot-starter 作为 starters 的名称。

  至于 springboot 提供了哪些 starters,参考:https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/html/using-boot-build-systems.html#using-boot-starter

  

上一篇:Spring Boot2 系列教程(十四)CORS 解决跨域问题


下一篇:完结撒花!129 集 21 个小时,松哥自制的 Spring Boot2 系列视频教程杀青啦!