Spring Boot中的spring-boot-starter-parent
在这篇文章中,我们将了解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>