Spring Boot中的spring-boot-starter-parent

时间:2020-01-09 10:44:32  来源:igfitidea点击:

在这篇文章中,我们将了解spring-boot-starter-parent,以及它如何通过提供有用的Maven默认值和依赖项管理来帮助快速轻松地进行Spring Boot开发。我们还将看到如何覆盖Spring Boot Starter Parent提供的默认依赖项。

Spring-boot-starter-parent配置

大多数使用Maven作为构建工具的Spring Boot项目都继承自spring-boot-starter-parent项目以获得合理的默认值。

要将Spring Boot项目配置为从spring-boot-starter-parent继承,请在pom.xml中设置父项,如下所示:

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

Spring Boot入门父级提供以下功能:

  • 兼容的Java版本作为默认编译器级别。对于Spring Boot 2.1.6版本,Java 1.8是默认设置。
  • UTF-8源编码。
  • 依赖管理-本节从spring-boot-dependencies pom继承而来,它管理常见依赖的版本。该依赖关系管理提供了受支持的依赖关系的精选列表,因此我们无需为构建配置中的任何这些依赖关系提供版本,Spring Boot会为我们管理。精选列表包含可与Spring Boot一起使用的所有spring模块以及完善的第三方库列表。该列表可作为标准的物料清单(BOM)清单(spring-boot-dependencies)使用。
  • 执行spring-boot:repackage目标,该目标将现有的JAR和WAR归档文件重新打包,以便可以使用java -jar从命令行执行它们。

Spring-boot-starter-parent组成

spring-boot-starter-parent本身继承自spring-boot-dependencies,下面给出的是spring-boot-starter-parent的pom.xml的一部分,我们可以在此处获得完整的配置https://github.com/spring-projects /spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml

<modelVersion>4.0.0</modelVersion>
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>${revision}</version>
  <relativePath>../../spring-boot-dependencies</relativePath>
</parent>
<artifactId>spring-boot-starter-parent</artifactId>
<packaging>pom</packaging>
<name>Spring Boot Starter Parent</name>
<description>Parent pom providing dependency and plugin management for applications built with Maven</description>
<properties>
  <main.basedir>${basedir}/../../..</main.basedir>
  <java.version>1.8</java.version>
  <resource.delimiter><@/resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <maven.compiler.source>${java.version}</maven.compiler.source>
  <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

在此pom.xml的属性部分中,我们可以看到Java版本和UTF编码的配置。

但是正是spring-boot-dependencies提供了精选的依赖项列表,在pom.xml的spring-boot-dependencies的属性部分中,我们可以看到各种依赖项的默认版本。在此处完成pom.xml https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-dependencies/pom.xml

<properties>
  <main.basedir>${basedir}/../..</main.basedir>
  <!-- Dependency versions -->
  <activemq.version>5.15.9</activemq.version>
  <antlr2.version>2.7.7</antlr2.version>
  <appengine-sdk.version>1.9.76</appengine-sdk.version>
  <artemis.version>2.9.0</artemis.version>
  <aspectj.version>1.9.4</aspectj.version>
  <assertj.version>3.13.1</assertj.version>
  <atomikos.version>4.0.6</atomikos.version>
  <bitronix.version>2.1.4</bitronix.version>
  <byte-buddy.version>1.9.16</byte-buddy.version>
  <caffeine.version>2.7.0</caffeine.version>
  ...
  ...

</properties>

在spring-boot-starter-parent中覆盖依赖项版本

如我们所见,spring-boot-dependencies提供了所使用的Spring Boot版本的兼容默认依赖项列表。如果要更改任何依赖项的版本,则可以在项目中使用的pom.xml的属性部分中定义版本。
例如,spring-boot-dependencies中的mongodb和log4j2的默认版本如下:

<mongodb.version>3.11.0-rc0</mongodb.version>
<log4j2.version>2.12.0</log4j2.version>

如果要提供其他版本,请在Spring Boot项目的pom.xml的属性部分中进行更改,如下所示。

<properties>
  <java.version>12</java.version>
  <mongodb.version>3.10.2</mongodb.version>
  <log4j2.version>2.8.2</log4j2.version>
</properties>

在没有父POM的情况下使用Spring Boot

如果我们不想从spring-boot-starter-parent继承,我们仍然可以通过使用scope = import依赖项来保留依赖项管理(而不是插件管理)的好处,如下所示:

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