spring-boot-starter-parent是什么?怎么换用自己的parent?

在创建一个Spring Boot工程时,我们会发现pom.xml中继承了Spring Boot的一个parent如下:

所以这个parent有什么作用呢?以及如果我们的项目,需要继承其它的或者自己项目中的parent怎么办呢?

在此,我们需要先明白这个parent的作用。

如果对Maven多模块项目,以及parentdependencyManagement等概念不太熟悉,可以先通过该文章进行学习:传送门

1,spring-boot-starter-parent的作用

我们可以点进去看一下这个parentpom.xml的源码:

折叠全部标签后如下:

可见这个parent没有引入任何依赖 ,主要是定义了一些属性和环境信息,以及继承了一个spring-boot-dependenciesparent,我们继续点进spring-boot-dependencies看一看:

折叠之后:

可见这个spring-boot-dependencies中也没有引入任何依赖,但是定义了许多依赖的版本,并且使用dependencyManagementpluginManagement进行了依赖和插件的版本管理。

相信现在大家明白怎么回事了,这个spring-boot-starter-parent的作用如下:

  • 定义了一系列属性properties,例如使用的Java版本,使用UTF-8编码构建,资源占位符等等
  • 继承了spring-boot-dependencies这使得我们使用Spring Boot相关组件和插件时都不需要声明版本了 ,因为继承的spring-boot-dependencies中依赖管理已经定义了使用的版本,我们相关依赖会直接从其中继承

可见之所以我们平时引入许多Spring Boot相关依赖例如Spring Web的Starter时都不需要声明版本,是因为我们继承了spring-boot-starter-parent,这些依赖的版本也会从中继承,非常方便。

2,换用自己的parent

如果说需要继承自己的项目作为parent,那么应当如何修改pom.xml使得我们引入Spring Boot相关组件时,仍然不需要手动管理依赖版本呢?事实上,借助dependencyManagement即可。

我们在项目中加入如下的dependencyManagement节点,引入Spring Boot依赖版本管理:

xml 复制代码
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>3.2.2</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

加入了这个依赖管理,我们就可以将spring-boot-dependencies中所有的dependencyManagement信息也引入到我们自己的项目中来,这样使用Spring Boot相关依赖,也不需要自己声明版本了,而是可以像之前一样从中继承版本,如需修改Spring Boot版本也在这里面修改即可。这时,我们就可以删除原有的parent节点换用自己的了!

事实上,在我们使用Spring Cloud或者Spring Cloud Alibaba时,也会看到这个依赖管理节点,它们的作用是一样的。

需要注意的是,由于现在不再使用spring-boot-starter-parent,之前继承的一些关于JDK版本等属性也会丢失,建议自己在项目pom.xml中设定一下properties即可:

xml 复制代码
<properties>
	<java.version>21</java.version>
	<maven.compiler.source>${java.version}</maven.compiler.source>
	<maven.compiler.target>${java.version}</maven.compiler.target>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

除此之外,我们的插件spring-boot-maven-plugin也需要声明一下版本号,和使用的Spring Boot版本号一致即可:

xml 复制代码
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<version>3.2.2</version>
	<configuration>
		<excludes>
			<exclude>
				<groupId>org.projectlombok</groupId>
				<artifactId>lombok</artifactId>
			</exclude>
		</excludes>
	</configuration>
</plugin>

事实上,我们可以在properties中声明一个属性变量表示使用的Spring Boot版本号,然后在dependencyManagementplugin中引用该变量作为版本号即可,我们修改pom.xml如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.gitee.swsk33</groupId>
	<artifactId>exception-handler-demo</artifactId>
	<version>1.0.0</version>
	<name>exception-handler-demo</name>
	<description>exception-handler-demo</description>

	<properties>
		<!-- 省略其它属性... -->
		<!-- 定义一个属性变量作为Spring Boot版本号 -->
		<spring.boot.version>3.2.2</spring.boot.version>
	</properties>

	<!-- 省略dependencies... -->

	<dependencyManagement>
		<dependencies>
			<!-- Spring Boot依赖版本管理 -->
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<!-- 引用属性变量 -->
				<version>${spring.boot.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<!-- 引用属性变量 -->
				<version>${spring.boot.version}</version>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

这样,如果后面要修改Spring Boot版本就方便多了!直接修改这个属性变量spring.boot.version即可。

相关推荐
杨荧2 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
java·开发语言·jvm·vue.js·spring boot·spring cloud·开源
Firechou8 分钟前
SpringBoot+MyBatis+MySQL的Point实现范围查找
spring boot·mysql·mybatis·point·范围查找·附近查找
喜欢打篮球的普通人16 分钟前
rust高级特征
开发语言·后端·rust
Ling_suu32 分钟前
Spring——单元测试
java·spring·单元测试
ModelBulider34 分钟前
十三、注解配置SpringMVC
java·开发语言·数据库·sql·mysql
苹果酱05671 小时前
C语言 char 字符串 - C语言零基础入门教程
java·开发语言·spring boot·mysql·中间件
csucoderlee1 小时前
eclipse mat leak suspects report和 component report的区别
java·ide·eclipse
代码小鑫1 小时前
A032-基于Spring Boot的健康医院门诊在线挂号系统
java·开发语言·spring boot·后端·spring·毕业设计
bjxiaxueliang1 小时前
一文详解MacOS使用VSCode搭建SpringBoot+Gradle开发环境
spring boot·vscode·macos
训山1 小时前
4000字浅谈Java网络编程
java·开发语言·网络