关于spring-boot-starter-parent
spring-boot-starter-parent 是 Spring Boot 提供的一个父项目,用于管理 Spring Boot 应用程序的 Maven 或 Gradle 构建。它提供了一组默认的配置和插件,以及一些常用的依赖管理,帮助开发者更方便地构建和管理 Spring Boot 项目。
主要功能包括:
默认配置: spring-boot-starter-parent 定义了一组默认的 Maven 或 Gradle 配置,包括编译器版本、编码规范检查、资源过滤等,让开发者无需重复配置这些基本设置。
依赖管理: spring-boot-starter-parent 预先定义了一组常用的依赖版本,如 Spring Framework、Spring Boot、Spring Boot Starter、Spring Boot Test 等,开发者只需在项目中引入相应的 Starter 依赖,无需手动指定版本号。
插件配置: spring-boot-starter-parent 配置了一些常用的 Maven 或 Gradle 插件,如 Spring Boot Maven Plugin、Surefire Plugin、PMD Plugin 等,用于简化项目的构建和管理过程。
版本管理: spring-boot-starter-parent 定义了一组常用的第三方库的版本号,如 Hibernate、Jackson、Log4j 等,使得开发者可以更方便地管理这些依赖的版本冲突。
使用 spring-boot-starter-parent 作为父项目可以带来诸多好处,如统一管理依赖版本、减少重复配置、提高项目的可维护性等。因此,在创建 Spring Boot 项目时,通常推荐使用 spring-boot-starter-parent 作为父项目来简化项目的构建和管理。
spring-boot-starter-parent-xxx.pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.6.4</version> </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> <java.version>1.8</java.version> <resource.delimiter>@</resource.delimiter> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <url>https://spring.io/projects/spring-boot</url> <licenses> <license> <name>Apache License, Version 2.0</name> <url>https://www.apache.org/licenses/LICENSE-2.0</url> </license> </licenses> <developers> <developer> <name>Pivotal</name> <email>info@pivotal.io</email> <organization>Pivotal Software, Inc.</organization> <organizationUrl>https://www.spring.io</organizationUrl> </developer> </developers> <scm> <url>https://github.com/spring-projects/spring-boot</url> </scm> <build> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/application*.yml</exclude> <exclude>**/application*.yaml</exclude> <exclude>**/application*.properties</exclude> </excludes> </resource> </resources> <pluginManagement> <plugins> ... ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>${start-class}</mainClass> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <propertiesEncoding>${project.build.sourceEncoding}</propertiesEncoding> <delimiters> <delimiter>${resource.delimiter}</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin> ... ... </plugins> </pluginManagement> </build> </project>
一、默认配置
1.编译器版本等信息
<properties> <java.version>1.8</java.version> <resource.delimiter>@</resource.delimiter> <maven.compiler.source>${java.version}</maven.compiler.source> <maven.compiler.target>${java.version}</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
2.资源定义
<resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/application*.yml</include> <include>**/application*.yaml</include> <include>**/application*.properties</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> <excludes> <exclude>**/application*.yml</exclude> <exclude>**/application*.yaml</exclude> <exclude>**/application*.properties</exclude> </excludes> </resource> </resources>
定义SpringBoot资源目录在resources目录下,application*.yml或者application*.properties均可以
tipss: 这里application.yml可以放在resources目录的下一层级,但不能超过第二层级,如application.yml可以放在resources/config目录下,不能放在resources/config/dev下
二、依赖管理
spring-boot-starter-parent 的父pom为
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.6.4</version> </parent>
spring-boot-dependencies
里面定义了该spring-boot版本所需要用到的组件库版本信息
和插件版本信息
,这也是为什么在第一节中我们只需要引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
不需要手动定义版本号的原因,因为spring-boot已经默认帮我们配置好版本信息,我们只需要按需引入相应的模块。
三、插件配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
默认配置spring-boot-maven-plugin,简化构建spring-boot的构建流程。
四、版本管理
在spring-boot-dependencies
中定义了很多三方库的信息,部分如下
<activemq.version>5.16.4</activemq.version> <antlr2.version>2.7.7</antlr2.version> <appengine-sdk.version>1.9.95</appengine-sdk.version> <artemis.version>2.19.1</artemis.version> <aspectj.version>1.9.7</aspectj.version> <assertj.version>3.21.0</assertj.version> <atomikos.version>4.0.6</atomikos.version> <awaitility.version>4.1.1</awaitility.version> <build-helper-maven-plugin.version>3.2.0</build-helper-maven-plugin.version> <byte-buddy.version>1.11.22</byte-buddy.version>
便于管理这些依赖,防止依赖冲突等。