SpringBoot(二)之parent解析
文章目录
关于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>
便于管理这些依赖,防止依赖冲突等。