Spring Boot 依赖管理: `spring-boot-starter-parent` 与 `spring-boot-dependencies`

前言

在 Spring Boot 的开发实践中,依赖管理是构建高质量应用的基础。spring-boot-starter-parentspring-boot-dependencies 是 Spring Boot 提供的两大核心依赖管理工具,它们在简化依赖版本控制、统一配置等方面发挥着关键作用。

一、核心概念解析

1.1 spring-boot-starter-parent

  • 定义
    是一个 Maven 父 POM,提供默认的项目配置(如编码、插件、资源处理)和依赖版本管理。
  • 核心功能
    • 依赖版本管理:通过继承 spring-boot-dependencies,自动管理所有 Spring Boot 依赖的版本。
    • 默认配置
      • 编译参数(如 Java 版本、编码格式)。
      • 插件配置(如 maven-compiler-pluginspring-boot-maven-plugin)。
      • 资源处理(自动替换 application.properties 中的占位符)。
    • 标准化构建:确保多模块项目的一致性。

1.2 spring-boot-dependencies

  • 定义
    是一个 BOM(Bill of Materials),仅管理依赖版本,不提供其他配置。
  • 核心功能
    • 版本集中控制:通过 <dependencyManagement> 声明所有依赖的版本。
    • 兼容性保障:确保 Spring Boot 生态内依赖的版本兼容性。
    • 灵活性:可与现有父 POM 结合使用,避免替换原有配置。

1.3 核心关系图

继承关系
spring-boot-starter-parent
spring-boot-dependencies
版本管理
默认配置
插件配置
编码格式
资源处理

二、核心区别对比

2.1 核心差异表

特性spring-boot-starter-parentspring-boot-dependencies
类型Maven 父 POMBOM(依赖版本清单)
作用范围依赖版本管理 + 默认配置(插件、编码、资源处理)仅依赖版本管理
继承关系继承自 spring-boot-dependencies独立存在,不依赖其他 POM
使用方式通过 <parent> 标签继承通过 <dependencyManagement> + <import> 引入
是否引入依赖不直接引入依赖,但通过 BOM 管理版本仅定义版本,不引入任何依赖

2.2 关键关系图

继承
spring-boot-starter-parent
spring-boot-dependencies
版本管理
默认配置

三、使用场景与最佳实践

3.1 spring-boot-starter-parent 的适用场景

  • 新建 Spring Boot 项目
    作为父 POM 直接继承,快速搭建标准化项目。
    <!-- pom.xml -->
    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/> <!-- 从 Maven 仓库获取 -->
    </parent>
    
  • 统一配置需求
    需要统一 Java 版本、编码、插件配置的多模块项目。

3.2 spring-boot-dependencies 的适用场景

  • 已有父 POM 的项目
    不想替换原有父 POM,但需管理 Spring Boot 依赖版本。
    <!-- pom.xml -->
    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
    </dependencyManagement>
    
  • 灵活版本覆盖
    需要自定义部分依赖版本时,通过 <properties> 覆盖。
    <properties><junit-jupiter.version>5.9.3</junit-jupiter.version>
    </properties>
    

四、代码示例与实战

4.1 使用 spring-boot-starter-parent 的完整项目配置

<!-- pom.xml -->
<project><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version></parent><properties><java.version>17</java.version></properties><dependencies><!-- 自动继承版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><!-- 内置的 spring-boot-maven-plugin 插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

4.2 使用 spring-boot-dependencies 的独立配置

<!-- pom.xml -->
<project><modelVersion>4.0.0</modelVersion><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 需要显式指定插件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!-- 手动配置插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

五、高级技巧与最佳实践

5.1 覆盖依赖版本

spring-boot-starter-parent 中,通过 <properties> 覆盖版本:

<properties><junit-jupiter.version>5.9.3</junit-jupiter.version><logback.version>1.2.11</logback.version>
</properties>

5.2 自定义父 POM

若需扩展功能,可创建自己的父 POM:

<!-- custom-parent/pom.xml -->
<project><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version></parent><groupId>com.example</groupId><artifactId>custom-parent</artifactId><properties><java.version>17</java.version></properties><dependencyManagement><!-- 自定义依赖版本 --></dependencyManagement>
</project>

5.3 版本冲突解决

通过 spring-boot-dependencies 确保版本一致性:

<!-- 依赖声明 -->
<dependency><groupId>com.example</groupId><artifactId>custom-library</artifactId><version>1.0.0</version> <!-- 手动指定版本 -->
</dependency>

六、总结与选择建议

6.1 核心总结

场景推荐方案原因
新项目快速搭建spring-boot-starter-parent提供默认配置,开箱即用
已有父 POM 的项目spring-boot-dependencies灵活管理版本,不破坏现有配置
需要完全控制配置spring-boot-dependencies自定义插件、编码等细节

6.2 选择建议

  • 优先使用 spring-boot-starter-parent
    当项目需要统一配置(如插件、编码、资源处理),且无现有父 POM 限制时。
  • 选择 spring-boot-dependencies
    当需要与现有父 POM 结合,或需自定义依赖版本时。

七、常见问题解答

7.1 为什么 spring-boot-starter-parent 需要继承 spring-boot-dependencies

  • 原因spring-boot-starter-parent 通过继承 spring-boot-dependencies 的 BOM,确保依赖版本的统一管理,避免版本冲突。

7.2 如何验证依赖版本是否被正确管理?

  • 方法
    使用 mvn dependency:tree 命令查看依赖树,确认版本是否符合预期。

八、总结

  • spring-boot-starter-parent 是“一站式”解决方案,适合快速搭建标准Spring Boot项目。
  • spring-boot-dependencies 是轻量级的依赖版本管理工具,适合需要灵活控制配置的复杂场景。
  • 关键关系spring-boot-starter-parent 内部已继承 spring-boot-dependencies,因此前者包含了后者的所有功能,但额外提供了默认配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】基本查询

目录 增加 查询 基本查询 where子句 结果排序 筛选分页结果 修改(更新) 删除 普通删除 截断表 插入查询结果 聚合函数 分组查询 这一节的内容是对表内容的增删查改&#xff0c;其中重点是表的查询 增加 语法&#xff1a; INSERT [INTO] table_name [(column [, …

【C++详解】C++入门(二)引用、内联函数、nullptr宏

文章目录 一、引用引用的概念和定义引用的功能引用的特性const引用const用法回顾权限的放大缩小const引用的功能 指针和引用的关系 二、内联函数三、nullptr补充结构体指针变量类型重定义 一、引用 引用的概念和定义 C祖师爷为了优化在部分场景中使用指针会出现的效率较低和比…

毕业设计-基于深度学习的实时网络入侵检测系统

项目技术说明 深度学习实时网络入侵检测系统是一种利用深度学习技术对网络流量进行实时分析&#xff0c;以识别和阻止潜在网络攻击的安全解决方案。相比传统基于规则的入侵检测系统(IDS)&#xff0c;这种系统能够通过学习网络流量的正常模式和异常模式&#xff0c;更有效地检测…

中药企业数字化转型:从传统制造到智能制药的跨越

在当今数字化浪潮下&#xff0c;中药企业正积极拥抱变革&#xff0c;努力实现从传统制造向智能制药的跨越&#xff0c;以适应市场竞争和满足人们对中药质量与效率的更高要求。 在原料管理环节&#xff0c;企业通过采用物联网技术&#xff0c;对中药材种植、采集过程进行全程监…

Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比,从核心机制、使用方式、代码示例及优缺点展开

以下是 Vue 2 的响应式 API 和 Vue 3 的组合式 API 的详细对比&#xff0c;从核心机制、使用方式、代码示例及优缺点展开&#xff1a; 1. Vue 2 的响应式 API 核心机制 基于 Object.defineProperty&#xff1a; 通过劫持对象的 getter 和 setter 实现数据变化追踪。限制&…

“八股训练营”学习总结

在参加为期 40 天的八股训练营的这段时间里&#xff0c;我收获满满&#xff0c;不仅在知识技能上得到了提升&#xff0c;更在学习习惯和自我认知方面有了很大的进步。 在知识层面&#xff0c;训练营涵盖了网络、数据库、缓存以及python测试开发等多方面的知识点。 网络方面&a…

Python对比两张CAD图并标记差异的解决方案

以下是使用Python对比两张CAD图并标记差异的解决方案&#xff0c;结合图像处理和CAD结构分析&#xff1a; 一、环境准备与库选择 图像处理库&#xff1a;使用OpenCV进行图像差异检测、颜色空间转换和轮廓分析。CAD解析库&#xff1a;若为DXF格式&#xff0c;使用ezdxf解析实体…

记录学习记录学习《手动学习深度学习》这本书的笔记(九)

马不停蹄地来到了第十二章&#xff1a;计算性能…… 感觉应该是讲并行计算方面的&#xff0c;比如GPU、CPU、CUDA那些。 第十二章&#xff1a;计算性能 12.1 编译器和解释器 这里先提出了命令式编程和符号式编程的概念。 命令式编程VS符号式编程 目前为止&#xff0c;本书…

模板引擎语法-过滤器

模板引擎语法-过滤器 文章目录 模板引擎语法-过滤器[toc]1.default过滤器2.default_if_none过滤器3.length过滤器4.addslashes过滤器5.capfirst过滤器6.cut过滤器7.date过滤器8.dictsort过滤器 1.default过滤器 default过滤器用于设置默认值。default过滤器对于变量的作用&…

make学习三:书写规则

系列文章目录 Make学习一&#xff1a;make初探 Make学习二&#xff1a;makefile组成要素 文章目录 系列文章目录前言默认目标规则语法order-only prerequisites文件名中的通配符伪目标 Phony Targets没有 Prerequisites 和 recipe内建特殊目标名一个目标多条规则或多个目标共…

网络安全技能大赛B模块赛题解析Server12环境

已知靶机存在⽹站系统&#xff0c;使⽤Nmap⼯具扫描靶机端⼝&#xff0c;并将⽹站服务的端⼝号作为Flag &#xff08;形式&#xff1a;Flag字符串&#xff09;值提交 使用nmap扫描目标靶机网站服务的端口号为8089 Falg&#xff1a;8089 访问⽹站/admin/pinglun.asp⻚⾯&#…

1、Linux操作系统下,ubuntu22.04版本切换中英文界面

切换中英文界面的方法很多&#xff0c;我也是按照一个能用的方法弄过来并且记录&#xff0c; 1.如果刚开始使用Ubuntu环境&#xff0c;桌面的语言环境为英文&#xff0c;需要安装中文简体的字体包 打开桌面终端&#xff0c;输入 sudo apt install language-pack-zh-hans lan…

SmolVLM2: The Smollest Video Model Ever(六)

继续微调 微调视频的代码如下&#xff1a; # 此Python文件用于对SmolVLM2进行视频字幕任务的微调 # 导入所需的库 import os os.environ["CUDA_VISIBLE_DEVICES"] "1" import torch from peft import LoraConfig, prepare_model_for_kbit_training, get…

Spring Boot安装指南

&#x1f516; Spring Boot安装指南 &#x1f331; Spring Boot支持两种使用方式&#xff1a; 1️⃣ 可作为常规Java开发工具使用 2️⃣ 可作为命令行工具安装 ⚠️ 安装前提&#xff1a; &#x1f4cc; 系统需安装 Java SDK 17 或更高版本 &#x1f50d; 建议先运行检查命令…

数据结构(七)---链式栈

#### 链式栈实现 ##### linkstack.h #ifndef _LINKSTACK_H #define _LINKSTACK_H // 引入相关的库文件 #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义元素类型的别名 typedef int DATA; //定义链式栈节点 typedef struct node { …

【Spring Boot】Maven中引入 springboot 相关依赖的方式

文章目录 Maven中引入 springboot 相关依赖的方式1. 不使用版本管理&#xff08;不推荐&#xff09;2、使用版本管理&#xff08;推荐&#xff09;2.1 继承 spring-boot-starter-parent2.2 使用 spring-boot-dependencies 自定义父工程2.3引入 spring-framework-bom Maven中引…

DataStreamAPI实践原理——快速上手

引入 通过编程模型&#xff0c;我们知道Flink的编程模型提供了多层级的抽象&#xff0c;越上层的API&#xff0c;其描述性和可阅读性越强&#xff0c;越下层API&#xff0c;其灵活度高、表达力越强&#xff0c;多数时候上层API能做到的事情&#xff0c;下层API也能做到&#x…

WPF 图片文本按钮 自定义按钮

效果 上面图片,下面文本 样式 <!-- 图片文本按钮样式 --> <Style x:Key="ImageTextButtonStyle" TargetType="Button"><Setter Property="Background" Value="Transparent"/><Setter Property="BorderTh…

驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架

&#x1f4d8; 一、电源子系统总览 在现代Linux内核中&#xff0c;电源管理不仅是系统稳定性的保障&#xff0c;也是实现高效能与低功耗运行的核心机制。 系统中涉及电源管理的关键子系统包括&#xff1a; I2C子系统&#xff1a;硬件通信基础Regulator子系统&#xff1a;电源…

设计模式全解析:23种经典设计模式及其应用

创建型模式 1. 单例模式&#xff08;Singleton Pattern&#xff09; 核心思想&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。适用场景&#xff1a;需要共享资源的场景&#xff0c;如配置管理、日志记录等。 public class Singleton {// 静态变量保存…