Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring-boot-starter-parent 项目的作用

Spring-boot-starter-parent 项目的作用

原创
作者头像
麦克马
发布于 2025-04-16 05:35:33
发布于 2025-04-16 05:35:33
1690
举报

前言

当我们使用 Spring Initializr 创建 Spring Boot 项目时,发现总会继承一个 spring-boot-starter-parent 作用父类。假如不继承就不能用了吗?这个父类的作用是什么呢?

在深入探究之前我们需要先了解一下 Maven 的继承特性。

Maven 继承

Maven 在设计时,借鉴了 Java 面向对象思想,提出了 POM 继承的概念。当一个项目中包含多个子模块时,可以在子模块的 POM 中通过 <parent\/> 标签指明其父项目,同时在父模块(项目)中通过 <modules\/> 指定它包含哪些子模块。这样就确定不同模块之间的继承关系。其带来的好处是,只需要在父模块中指定依赖模块的版本,子模块不用关心,方便统一管理,减少不同模块相同依赖项版本相互冲突的问题。需要指明的是,如果一个模块定义为父模块,则其 <pakaging\/> 属性必须为 pom。

spring-boot-starter-parent

回答上面的问题:如果不继承 spring-boot-starter-parent 就不能使用 Springboot 项目了吗?

答案肯定是否定的。如果我们打开 spring-boot-starter-parent 项目的 POM 文件就会发现,其实它又继承了另外一个 POM,而它本身只引入了 spring-boot-starter 一个依赖项(如果在 initializr的时候没有选择其它依赖项),另外还指定了 java 版本和两个 compiler 插件。

完整的 spring-boot-starter-parent 项目POM文件如下:

代码语言:java
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    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.0.5.RELEASE</version>
    <relativePath>../spring-boot-dependencies</relativePath>
  </parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-parent</artifactId>
  <version>2.0.5.RELEASE</version>
  <packaging>pom</packaging>
  <name>Spring Boot Parent</name>
  <description>Spring Boot Parent</description>
  <url>https://projects.spring.io/spring-boot/#/spring-boot-parent</url>
  <organization>
    <name>Pivotal Software, Inc.</name>
    <url>https://spring.io</url>
  </organization>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://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>http://www.spring.io</organizationUrl>
    </developer>
  </developers>
  <prerequisites>
    <maven>3.5</maven>
  </prerequisites>
  <scm>
    <connection>scm:git:git://github.com/spring-projects/spring-boot.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git</developerConnection>
    <url>http://github.com/spring-projects/spring-boot</url>
  </scm>
  <issueManagement>
    <system>Github</system>
    <url>https://github.com/spring-projects/spring-boot/issues</url>
  </issueManagement>
</project>

会发现它其实继承了 spring-boot-dependencies 。

spring-boot-dependencies

既然 sprin-boot-starter-parent 继承了 dependencies,那么 dependencies 里又做了些什么呢?因为 dependencies 的 POM 文件内容太长就不在这里列出了。其主要内容就是 <dependencyManagement\/> 和 <pluginManagement\/> 两个标签。

可以这么说:dependencies 通过 <DependencyManagement\/> 和 <pluginManagement\/> 两个标签统一指定了很多依赖并明确了它们的版本号,实现了上面我们说的统一版本管理,但其实并未真的引入这些依赖项。

dependencyManagement 和 pluginManagement

Maven 通过这种 xxxManagement 标签,或者说组件对依赖进行管理,它具有以下2大特性:

  • 在该元素下声明的依赖不会实际引入到模块中,只有在 dependencies 元素下同样声明了该依赖,才会引入到模块中。
  • 该元素能够约束 dependencies 下依赖的使用,即 dependencies 声明的依赖若未指定版本,则使用 dependencyManagement 中指定的版本,否则将覆盖 dependencyManagement 中的版本。

综上,spring-boot-dependencies 项目,或者说 spring-boot-starter-parent 项目只是给我们提供了一个管理依赖的 POM,而这些依赖是在当前 springboot 版本下进行验证过的一个依赖合集。

如果不引入(继承)spring-boot-starter-parent

我们新建一个空的 Maven 项目,依赖中引入 spring-boot-starter 框架(注意指定 version),然后在启动类上加上@SpringBootApplication 注解,照样可以成功启动:

Maven单继承问题

有人可能会问,如果我想使用 spring-boot-starter-parent 提供的依赖管理,但又不想继承它,可不可以?

答案是肯定的。

单继承:maven和Java一样都是单继承机制,maven当中有 <\type>pom<\/type> 和 <\scope>import<\/scope> ,通过这两个标签在dependencyManagement中声明依赖,可以替代继承(达到类似parent标签的作用,解决了单继承问题)。

代码语言:xml
AI代码解释
复制
<dependencyManagement>
	<dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>3.4.3</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
   </dependencies>
</dependencyManagement>

注意上面是官方推荐的方式,即引入 spring-boot-dependencies,而不是 spring-boot-starter-parent。但这样并不等价于继承 parent 的方式,原因是 import 依赖范围只能与 dependencyManagement 元素配合使用才会有效,其功能是将目标 pom.xml 中的 dependencyManagement 配置导入合并到当前 pom.xml 的 dependencyManagement 中,所以这种方式并没有把 parent 中引用的 plugin 一并继承过来,所以还需要我们自己声明打包插件的引用:

代码语言:xml
AI代码解释
复制
<build>
	<plugings>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>3.8.1</version>
		</plugin>
	</plugins>
</build>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot教程(二) | 创建SpringBoot项目
所谓spring Boot项目,其实本质上就是一个maven/gradle项目,这是里面通过引入springBoot专门设置好的依赖,完成整个项目开发流程的简化。所以我们就先创建一个maven 项目即可。当然也可以采用 spring initiallizer进行创建(需联网)。
一缕82年的清风
2022/04/08
6060
SpringBoot教程(二) | 创建SpringBoot项目
spring boot 中的 Parent POM 和 Starter 的作用什么?(☆☆☆)
spring boot 推荐在 maven 中,继承 spring-boot-starter-parent 来作为父项目。因为继承 spring-boot-starter-parent 项目,就获得一些合理的默认配置。使用这个 pom,可以统一项目中的版本依赖,从而避免了潜在的版本冲突。这个 parent 提供了以下特性:
水货程序员
2018/11/13
3.8K0
深入Spring Boot (二):Spring Boot对构建系统的支持
Spring Boot强烈建议开发者在使用Spring Boot的时候选择支持依赖管理的构建系统,以获取更好的使用支持,比如Maven或Gradle。因为Maven和Gradle的实现不同,所以Spring Boot对它们的使用支持也不同。 Maven 每次Spring Boot新版本发布时都会提供一个它所支持的Spring模块及第三方库版本列表,例如Spring Boot1.5.10版本支持的库列表可以在https://github.com/spring-projects/spring-boot/blo
JavaQ
2018/04/08
1.1K0
深入Spring Boot (二):Spring Boot对构建系统的支持
记录解决 Spring Boot 项目继承依赖导致编译失败问题
我们都知道,根据 Spring Boot 官网文档 中指出,项目需要配置继承 spring-boot-starter-parent 作为父 POM 如下:
哎_小羊
2019/05/25
3K0
spring-boot-starter大力出奇迹
​  上篇文章我们已经聊了SpringBoot的启动过程中的各类扩展点,那么从http://start.spring.io上我们生成的demo项目中,到目前就剩下了maven工程的pom.xml还没有进行探索了,那么本文我们就来看看这里面到底都有啥,把大力出奇迹的常见spring-boot-starter来聊一聊,以便更好地使用SpringBoot.
阿豪聊干货
2018/08/09
1K0
SpringBoot基础(二、原理分析)
接着上一篇SpringBoot基础(一、快速入门)的介绍,我们来简单的谈谈SpringBoot的原理分析。
营琪
2019/11/04
4590
你真的理解 Spring Boot 项目中的 parent 吗?
前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用:
江南一点雨
2019/08/30
3.9K0
你真的理解 Spring Boot 项目中的 parent 吗?
【Spring Boot】022-不使用spring-boot-starter-parent
是 Spring Boot 的父级依赖,加上此配置之后,当前的项目就是 Spring Boot 项目了。spring-boot-starter-parent 是一个特殊的 starter,它用来提供相关的 Maven 默认依赖。
訾博ZiBo
2025/01/06
1240
【Spring Boot】022-不使用spring-boot-starter-parent
一文读懂Spring Boot各模块组件依赖关系
spring boot 作为一款开箱即用的框架,在市场上有很高的流行度。但内部依赖错踪复杂,每个模块都有自己专属职责,同时又可以做为其他模块的补充,具有很强的扩展性。
微观技术
2020/08/20
3.4K0
Spring Cloud with Kubernetes 之 Config Maps
开启 Spring cloud 访问 Kubernetes Config Maps 的权限。
netkiller old
2020/10/10
1.4K0
springboot之场景启动器
首先看spring-boot-starter-parent,spring-boot-start就是场景启动器,这是所有项目的父项目,我们ctrl+鼠标左键点进去:
西西嘛呦
2020/08/26
5540
微服务(二)——SpringCloud入门&项目搭建
SpringCloud:分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
不愿意做鱼的小鲸鱼
2022/09/26
9940
微服务(二)——SpringCloud入门&项目搭建
SpringBoot:模块探究之spring-boot-dependencies
在 SpringBoot 开发时,我们常常会发现一个现象:即在 pom 文件中,加入一个新的依赖,往往不需要引入相应的版本号(如下代码块所示),就可以正常引入依赖,这其实是因为我们依赖了 spring-boot-starter-parent 模块的缘故!
栗筝i
2022/12/23
5.8K0
SpringBoot:模块探究之spring-boot-dependencies
微服务架构之Spring Boot(九)
本节详细介绍了如何使用Spring Boot。它涵盖了构建系统,自动配置以及如何运行应用程序等主题。我们还介绍了一些Spring Boot最佳做法。
用户1289394
2022/04/07
5830
Spring boot自定义parent POM
这个parent指定了spring-boot所需要的依赖。但是有时候如果我们的项目已经有一个parent了,这时候需要引入spring boot该怎么处理呢?
程序那些事
2020/07/08
1.1K0
原 SpringBoot 2.0 系列00
SpringBoot 2.0 系列001 -- 入门介绍以及相关概念 什么是SpringBoot? 项目地址:http://projects.spring.io/spring-boot/ SpringBoot介绍 Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提 供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。 SpringBoot功能 1:创建独立的sp
石奈子
2018/06/13
5590
spring boot dubbo配置(上古卷轴5基础整合包)
众所周知,阿里早已把dubbo捐赠给了Apache,现在dubbo由Apache在维护更新,dubbo也已经成了Apache下的顶级项目。所以本demo项目所依赖的坐标是Apache官方最新的3.0.4坐标。
全栈程序员站长
2022/07/25
6390
spring boot dubbo配置(上古卷轴5基础整合包)
聊聊Spring AI autoconfigure模块的拆分
spring-ai-spring-boot-starters/spring-ai-starter-ollama/pom.xml
code4it
2025/05/09
810
聊聊Spring AI autoconfigure模块的拆分
Spring Boot 2.0.0参考手册_中英文对照_Part III_13
This section goes into more detail about how you should use Spring Boot. It covers topics such as build systems, auto-configuration and how to run your applications. We also cover some Spring Boot best practices. Although there is nothing particularly special about Spring Boot (it is just another library that you can consume), there are a few recommendations that, when followed, will make your development process just a little easier.
Tyan
2019/05/25
7400
修改SpringBoot项目的Parent
通过 SpringBoot 创建的项目,默认都会使用 SpringBoot 作为 POM 文件的 parent。但是有些时候我们可能不想使用 SpringBoot 作为项目的 parent。这时候就需要修改 POM 文件来完成。(欢迎关注我的微信公众号:码农UP2U)
码农UP2U
2021/03/10
9020
相关推荐
SpringBoot教程(二) | 创建SpringBoot项目
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档