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即可。

相关推荐
pianmian11 小时前
类(JavaBean类)和对象
java
我叫小白菜2 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison2 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍3 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122463 小时前
JAVA内存区域划分
java·开发语言·redis
Piper蛋窝3 小时前
深入 Go 语言垃圾回收:从原理到内建类型 Slice、Map 的陷阱以及为何需要 strings.Builder
后端·go
勤奋的小王同学~3 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇3 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097623 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄4 小时前
设计模式之访问者模式
java·设计模式·访问者模式