咨询spring-boot-starter-parent与spring-boot-parent的区别及选用原因
spring-boot-parent 与 spring-boot-starter-parent 的区别及选型原因
一、核心定位差异
- spring-boot-parent:这是Spring Boot项目的基础构建父模块,本质上是个「纯构建配置骨架」。它只负责定义通用的构建规则——比如Java编译版本、编码格式、资源文件过滤方式、Maven插件的基础配置等,完全不涉及任何Spring Boot Starter相关的依赖管理。
- spring-boot-starter-parent:它是在
spring-boot-parent基础上扩展出来的「增强版父模块」。除了继承前者所有的构建配置外,最关键的是它集成了Spring Boot官方Starter的依赖版本管理。也就是说,当你在项目里引入spring-boot-starter-web、spring-boot-starter-data-jpa这类依赖时,不需要手动指定版本号,它会自动匹配与当前Spring Boot版本兼容的依赖版本,彻底避免版本冲突问题。
二、依赖继承关系
两者最终都以spring-boot-dependencies作为依赖版本管理的顶层父模块,但继承链不同:
spring-boot-parent直接继承spring-boot-dependencies,仅添加构建层面的配置。spring-boot-starter-parent继承spring-boot-parent,再额外添加Starter依赖管理、Spring Boot专属构建插件(比如Spring Boot Maven插件)的默认配置。
三、为什么大多数项目选spring-boot-starter-parent?
这完全是因为它贴合Spring Boot「约定大于配置」的核心思想,能大幅提升开发效率:
- 开箱即用的依赖版本管理:日常开发中,我们几乎都会用到各种Spring Boot Starter,用
spring-boot-starter-parent的话,不用手动维护一堆starter的版本号,官方已经帮你做好了版本兼容性校验,直接引入依赖即可。 - 简化构建打包流程:它自带了Spring Boot Maven插件的默认配置,你只需要几行简单配置就能打包出可直接运行的JAR/WAR包,不用自己去编写复杂的插件配置。
- 官方推荐的最佳实践:Spring Boot官方文档里首推的就是用
spring-boot-starter-parent作为项目父依赖,它是为快速启动Spring Boot项目量身打造的,能减少大量重复配置工作。
当然,spring-boot-parent也不是完全没用——如果你有一个项目不需要任何Spring Boot Starter,只是想复用Spring Boot的基础构建配置,那它会是个选择,但这种场景在实际开发中非常少见。
内容的提问来源于stack exchange,提问作者h Kishore




