Spring Boot Starter Parent介绍
引言
spring-boot-starter-parent 是一个特殊的项目,为基于 Spring Boot 的应用程序提供默认配置和默认依赖。
在本 Spring Boot 教程中,我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供的所有配置选项,以及如何根据需要覆盖这些默认配置。
快速引入
如果你的工程是基于Maven构建的,可以在pom.xml中按以下方式引入:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/> <!-- lookup parent from repository -->
</parent>
类似的,如果是基于Gradle构建,可以参考按以下方式在build.gradle中引入:
plugins {id 'java'id 'org.springframework.boot' version '3.1.2'id 'io.spring.dependency-management' version '1.1.2'
}dependencies {implementation 'org.springframework.boot:spring-boot-starter'testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
什么是Spring Boot Starter Parent项目
Spring Boot 旨在简化构建 Spring 应用程序的过程,同时尽量减少配置工作量。为此,诞生了 spring-boot-starter-parent父项目,为基于 Spring Boot 的应用程序提供默认配置和依赖项管理。
使用 spring-boot-starter-parent 作为父项目,可以确保应用程序遵循 Spring Boot 推荐的最佳实践,并且能够轻松地利用 Spring Boot 提供的各种特性。
<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.howtodoinjava</groupId><artifactId>spring-webmvc</artifactId><packaging>jar</packaging><version>0.0.1-SNAPSHOT</version><name>spring-webmvc Maven Webapp</name><url>https://howtodoinjava.com</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>......</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
当我们创建一个 Spring Boot 项目时,我们使用 spring-boot-starter-parent 作为我们项目的 pom.xml 或 build.gradle 的父级。添加它之后,我们的项目会从这个父项目中继承默认的构建、依赖项和配置,因此我们不必手动指定它们。

通过使用 spring-boot-starter-parent,我们可以快速启动 Spring Boot 应用程序开发并减少设置常见配置和依赖项所需的工作量。
Spring Boot Dependencies 项目介绍
“Spring Boot Starter Parent”项目进一步扩展了 spring-boot-dependencies 项目,spring-boot-dependencies 项目的作用包括:
- 统一依赖版本管理:为 Spring Boot 应用程序中常用的依赖项提供统一的版本管理,确保所有依赖项的版本都是兼容且经过测试的。
- 减少版本冲突:通过集中管理所有依赖项的版本,避免了因版本不一致导致的问题。
- 简化依赖声明:在项目中引用依赖项时,无需指定版本号,因为这些信息已经由 spring-boot-dependencies 统一管理。
<properties><activemq.version>5.18.2</activemq.version><angus-mail.version>1.1.0</angus-mail.version><artemis.version>2.28.0</artemis.version><aspectj.version>1.9.19</aspectj.version><assertj.version>3.24.2</assertj.version><awaitility.version>4.2.0</awaitility.version>......
</properties>
我们可以参考 spring-boot-dependencies项目的最新版本,并检查其 pom.xml 以获取所有依赖项使用的最新版本。
项目依赖管理
引入默认版本的依赖
一旦我们在项目中声明了 spring-boot-starter-parent,我们就可以引入其中的任何依赖项,只需在 dependencies 标签中声明它们即可。这些依赖项已经在 spring-boot-starter-parent 中指定了默认版本,因此无需在项目中再次指定版本号。
<dependencies><!-- 引入 Spring Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 其他依赖项 -->
</dependencies>
由于 spring-boot-starter-parent 已经管理了所有依赖项的版本,因此上述代码片段中不需要指定版本号。这样可以简化依赖管理,并确保所有依赖项版本的一致性。
这种方式不仅简化了依赖项的管理,还确保了项目使用的是经过测试和验证的依赖项组合。
引入不同版本的依赖
要包含具有不同版本的依赖项,我们可以在 dependencyManagement 部分中指定依赖项及其版本。这样做可以覆盖 spring-boot-starter-parent 中默认提供的版本,同时仍然享受统一版本管理带来的便利。
<dependencyManagement><dependencies><!-- 覆盖特定依赖项的版本 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.4</version> <!-- 特定版本 --></dependency></dependencies>
</dependencyManagement>
在这个例子中,spring-boot-starter-web 的版本在 dependencyManagement 部分中被指定为 2.7.4。这样,在实际使用的依赖项中引用 spring-boot-starter-web 时,就可以使用这个指定的版本,而不是 spring-boot-starter-parent 中默认的版本。
通过这种方式,你可以灵活地覆盖或指定特定依赖项的版本,同时仍然保持项目依赖项的整体一致性。
或者,我们可以在属性部分覆盖所包含库的版本号。
<properties><junit.version>4.13.2</junit.version><junit-jupiter.version>5.9.3</junit-jupiter.version>
</properties>
总结
本 Spring Boot 教程讨论了特殊项目 spring-boot-starter-parent 和 spring-boot-dependencies,它们之间的继承关系,以及它们在我们创建的任何 Spring Boot 项目中所带来的好处。我们还学习了如何包含默认依赖项以及如何覆盖这些依赖项的版本。
通过使用 spring-boot-starter-parent 和 spring-boot-dependencies,我们可以:
- 简化依赖管理:避免在项目中显式指定每个依赖项的版本号,从而减少版本冲突的风险。
- 统一版本控制:确保所有依赖项的版本都是统一管理的,这有助于维护项目的稳定性和兼容性。
- 提高开发效率:通过预配置的默认设置和插件配置,可以更快地搭建项目基础结构。
- 灵活覆盖版本:在需要时,可以在 dependencyManagement 部分中覆盖特定依赖项的版本,以适应特定项目需求。
总之,这些工具和最佳实践帮助开发者更容易地构建健壮且易于维护的 Spring Boot 应用程序。希望本教程对您的学习之旅有所帮助!
祝您学习愉快!!
相关文章:
Spring Boot Starter Parent介绍
引言 spring-boot-starter-parent 是一个特殊的项目,为基于 Spring Boot 的应用程序提供默认配置和默认依赖。 在本 Spring Boot 教程中,我们将深入了解所有 Spring Boot 项目内部使用的 spring-boot-starter-parent 依赖项。我们将探讨此依赖项所提供…...
【含开题报告+文档+PPT+源码】基于SpringBoot乡村助农益农平台的设计与实现
开题报告 近年来,随着社会经济的快速发展和人民生活水平的提高,人们对优质农产品的需求越来越高。然而,传统的农产品销售管理模式存在一些问题。首先,农产品供应链信息不透明,导致生产者难以了解市场需求和价格变动趋…...
数据中心运维挑战:性能监控的困境与智能化解决方案的探寻
随着数字化进程的加速,数据中心已成为企业信息架构的核心支撑,其运维管理的复杂度和重要性也随之提升。运维团队需应对设备老化、资源分配失衡、性能波动等多重难题,以确保数据中心持续高效运行。 其中,性能监控作为运维管理的关键…...
基于SSM的民宿管理系统【附源码】
基于SSM的民宿管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1用户信息管理 5.2 房东信息管理…...
显卡 3090 vs v100
1.3090 Date: 2020 AmperePielines/ Cuda cores: 10496 2.V100 Date: 2018 VoltaPielines/ Cuda cores: 5129 3.结构 & Core比较: v100优点: v100功耗小v100较快的双精度(fp64)和混合精度(fp16fp32)pcie版的NVLink与2080ti完全一致 v100缺点: 不支持整数格式计算&…...
怎么在单片机裸机程序中移植EasyLogger?
1、介绍 EasyLogger 是一款超轻量级、高性能的C日志库,非常适合对资源敏感的软件项目。例如:IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但…...
C/C++解析文件名和目录路径
文章目录 主要函数使用注意事项示例程序总结 #include <libgen.h> 是一个 C/C 语言的头文件,主要用于字符串处理,特别是在处理文件路径时。它提供了一些函数来帮助你解析文件名和目录路径。 主要函数 以下是 libgen.h 中一些常见的函数ÿ…...
Git 基本命令行操作
Git是一个开源的分布式版本控制系统,用于管理源代码和文档的版本。以下是Git的基本命令行操作: 一、配置 安装完成后,需要配置Git的用户名和邮箱,以便在提交记录时记录操作者的信息。 配置全局用户名:git config --g…...
【Rust练习】17.泛型
练习题来自:https://practice-zh.course.rs/generics-traits/generics.html 函数 1 // 填空 struct A; // 具体的类型 A. struct S(A); // 具体的类型 S. struct SGen<T>(T); // 泛型 SGen.fn reg_fn(_s: S) {}fn gen_spec_t(_s: SGen<A&…...
java脚手架系列4--测试用例、拦截器
异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题,无论是后端对自己的代码质量把的第一道关也好,也是对测试减缓压力。这里就不过多讲述测试用例的重要性,但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…...
论文推荐 |【Agent】自动化Agent设计系统
论文标题: Automated Design of Agentic Systems 论文地址: https://arxiv.org/abs/2408.08435 GitHub地址: https://github.com/ShengranHu/ADAS 自动化代理设计在性能和通用性方面显著超越了手动方法。 • 引入了自动化代理系统设计&am…...
Linux操作系统提供了五种主要的IO(输入/输出)模型
Linux操作系统提供了五种主要的IO(输入/输出)模型,这些模型旨在优化应用程序对输入输出操作的管理和处理。以下是关于这五种IO模型的详细介绍。 一、阻塞IO(Blocking IO) 阻塞IO是最常见、最传统的IO模型。在这种模型…...
基于深度学习的花卉识别系统
简介: 基于Python的花卉识别分类系统利用深度学习和计算机视觉技术,能够准确识别和分类各种花卉,如玫瑰、郁金香和向日葵等。这种系统不仅有助于植物学研究和园艺管理,还在生态保护、智能农业和市场销售等领域展现广泛应用前景。随…...
【斯坦福CS144】Lab0
一、实验目的 1.初步了解计算机网络,准备实验所需的材料和环境; 2.掌握基础实验方法; 3.动手实现网络功能。 二、实验内容 1.下载实验所需的资料,安装虚拟机,配置环境; 2.获取一个网页; …...
关于Mybatis中,IPage<PO>转换成IPage<VO>的问题
以下是一个比较常见通用的一个查询并且为单表查询,在开发初期,或者项目不是很复杂的时候,或者一开始项目框架就规划好的情况下,通常我们都会封装。 在我们的项目中,这部分代码其实是自动生成的,足以满足大…...
使用idea和vecode创建vue项目并启动(超详细)
一、idea创建vue项目 创建项目之前先下载好插件 新建项目找到vue生成器 写好名称,找到自己需要存放的地址,node解释器安装方式可以看我上一个博客,vueCLI是选择vue的版本,我们可以使用idea自带的vue版本默认是vue3,创…...
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
今天想通过和大家分享如何删除字符串最后一个字符的N种实现方法,来回顾一些基础知识点。 01第一类、字符串方式 这类方法是通过string类型自身方法直接实现。 1、Substring方法 相信大多数人第一个想到的可能就是这个方法。Substring方法是字符串内置方法&#…...
成都睿明智科技有限公司怎么样靠谱吗?
随着短视频与直播的深度融合,抖音电商凭借其强大的流量入口、精准的算法推荐以及便捷的购物体验,迅速崛起。对于传统企业和新兴品牌而言,这无疑是一个不可多得的机遇。然而,如何在这片红海中脱颖而出,就需要借助专业的…...
docker简述
1.安装dockers,配置docker软件仓库 安装,可能需要开代理,这里我提前使用了下好的包安装 启动docker systemctl enable --now docker查看是否安装成功 2.简单命令 拉取镜像,也可以提前下载使用以下命令上传 docker load -i imag…...
第27周:Transformer实战:文本分类
目录 前言 一、前期准备 1.1 环境安装 1.2 加载数据 二、数据预处理 2.1 构建词典 2.2 生成数据批次和迭代器 2.3 构建数据集 三、模型构建 3.1 定义位置编码器 3.2 定义Transformer模型 3.3 初始化模型 3.4 定义训练函数 3.5 定义评估函数 四、训练模型 4.1 模…...
终极指南:3步重塑你的Windows桌面视觉体验
终极指南:3步重塑你的Windows桌面视觉体验 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想象一下,当你专注工作…...
QT无边框窗口实战:从圆角绘制到自定义标题栏与拖拽交互
1. 为什么需要无边框窗口? 现代桌面应用越来越注重视觉体验,传统的系统标题栏往往与整体设计风格格格不入。想象一下,你精心设计了一款深色主题的音乐播放器,顶部却突兀地挂着Windows默认的白色标题栏——这种割裂感正是无边框窗口…...
Arm Compiler 6.16LTS功能安全认证语言扩展解析
1. Arm Compiler for Embedded FuSa 6.16LTS语言扩展支持现状解析在功能安全关键型嵌入式系统开发中,编译器工具链的认证状态直接关系到最终产品的合规性。Arm Compiler for Embedded FuSa 6.16LTS作为经过功能安全认证的工具链,其语言扩展支持情况需要开…...
WindowResizer终极指南:5分钟掌握Windows窗口强制调整技巧
WindowResizer终极指南:5分钟掌握Windows窗口强制调整技巧 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的Windows应用程序窗口而烦恼吗?无…...
避坑指南:SAP BP客户维护cl_md_bp_maintain的那些“坑”与最佳实践
SAP BP客户维护实战:cl_md_bp_maintain深度避坑手册 当ABAP开发人员第一次接触cl_md_bp_maintain类时,往往会被其强大的业务伙伴(Business Partner)管理功能所吸引,但随之而来的是一系列令人头疼的"坑"。本文将从实际项目经验出发&…...
从失败案例看全球化内容服务的合规架构与自动化风控实践
1. 项目概述与背景解析最近在和一些做全球化内容分发或者跨国协作项目的朋友交流时,大家普遍会提到一个词:“内容合规性审查”。这听起来像是一个法务或者运营的术语,但对我们这些搞技术、做开发的人来说,它背后其实是一整套复杂的…...
别再死磕PSO了!用Python手把手教你实现GWO灰狼优化算法(附完整代码)
用Python实战GWO灰狼优化算法:告别传统优化方法的局限 在工程优化和机器学习领域,算法选择往往决定了问题求解的效率和质量。传统粒子群优化(PSO)算法虽然广为人知,但其参数调节复杂、易陷入局部最优的缺点也日益明显。灰狼优化算法(Grey Wol…...
OpenClaw用户如何快速接入Taotoken并开始使用Agent工作流
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 OpenClaw用户如何快速接入Taotoken并开始使用Agent工作流 对于已经在使用OpenClaw进行Agent开发的用户来说,接入Taotok…...
OpenDAN个人AI操作系统:从零构建智能体协作框架
1. 项目概述:个人AI操作系统的诞生与愿景最近在GitHub上看到一个项目,叫“OpenDAN-Personal-AI-OS”,第一眼看到这个标题,我就被吸引住了。作为一个在软件开发和AI应用领域摸爬滚打了十多年的从业者,我见过太多“AI助手…...
单例模式深度解析:从基础实现到生产级避坑指南
1. 单例模式:为什么它既是基石又是“坑”在软件开发的江湖里,单例模式(Singleton Pattern)的名号,几乎无人不知。它被写进教科书,是设计模式中最容易理解、也最常被提及的模式之一。但有趣的是,…...
