当前位置: 首页 > news >正文

spring-boot-starter-parent和spring-boot-dependencies介绍

springboot项目的pom文件中,我们经常看见这样(下图)两种springboot的版本依赖管理方式;图片中的这两种依赖声明方式任意用其中一种都可以。文章后面会简单阐述一下区别和使用场景。

事例中完整的pom文件

<?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.zhh.platform</groupId><artifactId>demo2</artifactId><version>0.0.1-SNAPSHOT</version><name>demo2</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.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><!-- 声明依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><!-- 声明依赖 --><!--    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>--><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zhh.platform.Demo2Application</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

1. 两者的区别和作用

​spring-boot-starter-parent继承了spring-boot-dependencies,打开spring-boot-starter-parent的pom文件就能看见他的父级就是spring-boot-dependencies,不过他多了一些配置,比如配置了UTF-8编码格式,如果我们继承了spring-boot-starter-parent,就可以不用再配置编码格式,否则还是需要配置一下

下面是spring-boot-dependencies的pom文件部分截图

他提供了相关的默认版本依赖,使用它之后,常用的包依赖可以省去version标签,例如:

在使用过程中,如果用的是spring-boot-starter-parent,一般会把他写在parent标签中;如果用的是spring-boot-dependencies,一般会把他写在dependencyManagement标签中,例如:

    <!-- 声明依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><!-- 两者选择其一,另一个注释掉 --><!-- 声明依赖 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

其实反过来写也可以,不过还是不要独行特立,例如:

    <!-- 声明依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.13</version></parent><!-- 两者选择其一,另一个注释掉 --><!-- 声明依赖 --><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

上面说到了两种声明父依赖的方式分别是在<parent>标签和<dependencyManagement>标签中声明,有什么区别呢?

2. parent标签和dependencyManagement标签中声明父依赖的区别

<parent>标签只支持单继承,如果需要多个父级,就需要用到dependencyManagement标签。

假如我们现在要添加 spring-boot-starter-web 依赖,我们是不需要声明版本的,

但是如果现在我们需要添加 spring-cloud-starter-gateway 依赖,你会发现,如果不声明版本根本就不行,因为spring-cloud-starter-gateway是springCloud的相关依赖,他在spring-boot-starter-parent的父级spring-boot-dependencies中根本就没有对应的版本声明,这个时候如果不想自己声明版本,就需要在dependencyManagement标签中添加spring-cloud-dependencies的声明,spring-cloud-dependencies的pom文件中声明了springcloud相关依赖的版本

在使用过程中,如果需要多个父依赖,就需要用到dependencyManagement标签,可以一个父依赖在parent标签中,其他的父依赖在dependencyManagement标签中,也可以都在dependencyManagement标签中。

如果只有一个父依赖,可以在dependencyManagement标签中声明,也可以在parent标签中声明。

随便理一下dependencyManagement标签和dependencies标签的区别

a.dependencyManagement标签

dependencyManagement标签可以理解成一个maven中的依赖管理器,他只声明不引入。在maven多模块项目(父子工程)中,一般都是在dependencyManagement标签中声明所有需要的依赖,然后子模块中只需要添加相应的groupId和artifactId即可,并不需要声明版本号。这样做的目的是为了方便jar包版本的统一管理,如果需要修改jar依赖的版本,只需要修改父pom一个地方即可。
 

b. dependencies标签
 

dependencies标签中引入了一个jar包之后,如果没有加上version版本号的话,那么maven就会去<dependencyManagement>里找对应groupId和artifactId的声明并使用对应的版本号,先在当前pom文件的dependencyManagement标签中找,如果没有,就到父模块的dependencyManagement标签中找,都没有就报错。

相关文章:

spring-boot-starter-parent和spring-boot-dependencies介绍

springboot项目的pom文件中&#xff0c;我们经常看见这样(下图)两种springboot的版本依赖管理方式&#xff1b;图片中的这两种依赖声明方式任意用其中一种都可以。文章后面会简单阐述一下区别和使用场景。 事例中完整的pom文件 <?xml version"1.0" encoding&quo…...

缓存穿透解决方案之布隆过滤器

布隆过滤器可以快速判断数据是否存在&#xff0c;避免从数据库中查询数据是否存在&#xff0c;减轻数据库的压力 布隆过滤器是由一个初值为0的bit数组和N个哈希函数&#xff0c;可以用来快速的判断某个数据是否存在 当我们想要标记某个数据是否存在时&#xff0c;布隆过滤器会…...

pptx和ppt有什么区别?了解两者之间的微妙差异

在现代办公和学习环境中&#xff0c;PowerPoint已成为我们生活中不可或缺的一部分。随着技术的不断进步&#xff0c;PowerPoint的格式也在不断更新。对于许多初学者&#xff0c;可能会对PPT和PPTX这两种格式感到困惑。本文旨在深入探讨PPTX与PPT之间的主要差异&#xff0c;帮助…...

LabVIEW水下温盐深数据一体化采集与分析

LabVIEW水下温盐深数据一体化采集与分析 开发一个基于LabVIEW的水下温盐深数据一体化采集与分析系统&#xff0c;实现海洋环境监测的自动化和精确化。通过集成温度、盐度和深度传感器&#xff0c;结合USB数据采集卡&#xff0c;利用LabVIEW软件开发的图形化界面&#xff0c;实…...

适配器模式 详解 设计模式

适配器模式 适配器模式是一种结构型设计模式&#xff0c;其主要作用是解决两个不兼容接口之间的兼容性问题。适配器模式通过引入一个适配器来将一个类的接口转换成客户端所期望的另一个接口&#xff0c;从而让原本由于接口不匹配而无法协同工作的类能够协同工作。 结构 适配…...

探索rsync远程同步和SSH免密登录的奥秘

目录 集群分发脚本xsyncscp&#xff08;secure copy&#xff09;安全拷贝rsync 远程同步工具集群分发脚本 SSH免密登录免密登录原理SSH免密登录配置生成公钥和私钥授权测试 在现代科技飞速发展的时代&#xff0c;数据的备份和迁移成为了一个重要的课题。其中&#xff0c;rsync远…...

JavaScript new、apply call 方法

new、apply、call、bind JavaScript 中的 apply、call和 bind 方法是前端代码开发中相当重要的概念&#xff0c;并且与 this 的指向密切相关 new new 关键词的主要作用 就是执行一个构造函数、返回一个实例对象 根据构造函数的情况&#xff0c;来确定是否可以接受参数的传递…...

助力智能化农田作物除草,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中&#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了&#xff0c;结合智能化的设备可以实现只能除草等操作&#xff0c;玉米作物场景下的杂草检测我们则少有涉及&#xff0c;这里本文的主要目的就是想要基于DETR模型来开发构建玉米…...

O(1)转移线性dpLeetCode 2369. 检查数组是否存在有效划分

一、题目 1、题目描述 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子数组。 如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种 有效 划分&#xff1a; 子数组 恰 由 2 个相等元素组成&#xf…...

【力扣hot100】刷题笔记Day17

前言 今天竟然不用开组会&#xff01;天大的好消息&#xff0c;安心刷题了 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 回溯&#xff08;排列&#xff09; class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 回溯def backtrack():if len(…...

leetcode日记(34)通配符匹配

这道题做了很久很久……一开始我想用的方法是使用双指针&#xff0c;分别指向两数组&#xff0c;然后依次按照题目中的规则遍历&#xff0c;做了很久发现时间超限了&#xff01;这是我最后超时的代码&#xff01; class Solution { public:bool isMatch(string s, string p) {…...

一张图读懂人工智能

一、生成人工智能的概念和应用&#xff0c;以及如何使用大型语言模型进行聊天和创造原创内容。这项技术将会对人类和企业产生深远影响。 计算机获得学习、思考和交流的能力&#xff0c;被称为生成人工智能。生成人工智能可以立即获得人类所有知识的总和&#xff0c;并回答任何…...

5.37 BCC工具之uflow.py解读

一,工具简介 uflow工具用于跟踪方法的进入和退出事件,并打印一个可视化的流程图,显示方法是如何进入和退出的,类似于带有断点的跟踪调试器。这对于理解Java、Perl、PHP、Python、Ruby和Tcl等高级语言中的程序流非常有用,这些语言为方法调用提供了USDT探测。 二,代码示例…...

R语言简介,R语言开发环境搭建步骤,R基础语法以及注释详解

R语言是一种用于统计计算与绘图的编程语言&#xff0c;由新西兰奥克兰大学的统计学家罗斯伊哈卡和罗伯特杰特曼于1993年发明。R语言是一种自由、免费、源代码开放的软件&#xff0c;属于GNU系统的一个分支&#xff0c;如今被广泛地应用于统计分析、数据挖掘等领域。 R语言的特…...

【Django】执行查询—检索对象

检索对象 以下述模型为基础&#xff0c;讨论检索对象的方式方法&#xff1a; from datetime import datefrom django.db import modelsclass Blog(models.Model):name models.CharField(max_length100)tagline models.TextField()def __str__(self):return self.nameclass …...

Python:练习:编写一个程序,写入一个美金数量,然后显示出如何用最少的20美元、10美元、5美元和1美元来付款

案例&#xff1a; python编写一个程序&#xff0c;写入一个美金数量&#xff0c;然后显示出如何用最少的20美元、10美元、5美元和1美元来付款&#xff1a; Enter a dollar amout:93 $20 bills: 4 $10 bills: 1 $5 bills:0 $1 bills:3 思考&#xff1a; 写入一个美金数量&…...

模板方法模式 详解 设计模式

模板方法模式 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。这种模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 结构 抽象类&#xff08;Abstract Class&#xff09;&#xff1a;负责给出一…...

Node.js_基础知识(http模块)

网络基础 URL的组成结构&#xff1a;协议名: // 主机名 [:端口号] [/路径] [?查询字符串]协议默认端口&#xff1a; http&#xff1a;80&#xff0c;开发常用端口有 3000、8080、8090、9000https: 443 如果端口被其他程序占用&#xff0c;可以使用 资源监视器 找到占用端口的…...

matlab工具包

matlab安装yalmip和cplex出错 - 知乎 (zhihu.com) Cplex的安装和使用实例-CSDN博客 一条龙教程&#xff1a;Matlab下使用yalmip(工具箱)cplex&#xff08;求解器&#xff09;_使用yalmip和cplex求解器进行建模和求解的步骤如下:-CSDN博客 啊啊啊&#xff0c;好开心&#xff…...

UCSF DOCK 分子对接详细案例(01)- rigid, fixed anchor, flexible dock

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、操作环境二、研究背景三、受体-配体结构文件准备3.1准备文件夹DOCK_workdir, 下载晶体结构3.1.1 来自湿实验的受体配体共晶结构&#xff1a;3.1.2 来自深度学习和语言模型推理预测的蛋白结构&a…...

中国油车的新技术,挖到日本汽车的根,双管齐下真要命!

今年以来在国内市场电车攻势凌厉之下&#xff0c;传统油车企业却大举发布节油混动&#xff08;HEV&#xff09;技术&#xff0c;这不仅是为了与电车竞争&#xff0c;更是为了走向国际市场&#xff0c;对日本汽车最后的命根下手&#xff0c;进一步增强中国汽车的国际市场竞争力。…...

不只是约球:运动搭子AI如何通过“胜率匹配”找到旗鼓相当的对手?

运动搭子&#xff08;深圳&#xff09;科技有限公司&#xff08;2026年成立于深圳&#xff0c;官网www.yundongdazi.com&#xff09;&#xff0c;以小程序为核心打造一站式全场景运动生态平台&#xff0c;覆盖18-45岁各类运动人群&#xff0c;现有22万客户&#xff0c;搭载运动…...

Alpine镜像构建卡在APKINDEX.tar.gz?可能是你的Dockerfile少了这行代码

Alpine镜像构建卡在APKINDEX.tar.gz&#xff1f;国内开发者必看的Dockerfile优化指南 当你满怀期待地执行docker build命令&#xff0c;却眼睁睁看着进度条卡在fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz这个步骤时&#xff0c;那种感觉就像…...

别再手动写JCo3.0连接代码了!用Spring Boot整合SAP RFC接口的完整配置流程

Spring Boot与SAP JCo3.0深度整合&#xff1a;告别繁琐的手工RFC调用 在传统企业IT架构中&#xff0c;SAP系统往往扮演着核心业务中枢的角色。当Java开发者需要与SAP进行数据交互时&#xff0c;JCo3.0&#xff08;Java Connector&#xff09;几乎是绕不开的技术选择。但原生JCo…...

从零到一:实战微调Transformer处理多标签文本分类

1. 为什么选择Transformer处理多标签分类&#xff1f; 我第一次接触多标签分类任务是在处理电商商品属性标注时。当时用传统机器学习方法效果总是不理想&#xff0c;直到尝试了Transformer架构才发现新大陆。Transformer之所以适合这类任务&#xff0c;核心在于它的自注意力机制…...

012、张量与数据布局:内存模型与对齐策略

012、张量与数据布局:内存模型与对齐策略 上周调一个卷积性能问题,在某个边缘设备上跑得比预期慢了三倍。用perf抓热点发现大量时间花在非对齐内存访问上——明明数据尺寸都是4的倍数,为什么还会不对齐?最后定位到问题:张量在内存中的布局和编译器假设的不一致,导致生成…...

别再折腾编译了!用Qt和VLC 2.2.4 SDK在Windows上快速打造自己的视频播放器

用Qt和VLC SDK在Windows上快速构建视频播放器的完整指南 每次看到开发者为了一个简单的视频播放功能而陷入VLC编译的泥潭&#xff0c;我都忍不住想——其实有更优雅的解决方案。本文将带你绕过复杂的编译过程&#xff0c;直接使用预编译的VLC 2.2.4 SDK和Qt框架&#xff0c;在W…...

Harness层接口签名:防篡改设计

Harness层接口签名&#xff1a;防篡改设计一、引言 (Introduction) 1.1 钩子&#xff1a;从微服务架构中那起“无声无息的100万元损失”说起 各位读者好&#xff0c;我是资深软件架构师、开源社区安全方向贡献者&#xff0c;同时也是「云原生与微服务安全实践」技术专栏的作者。…...

当LLM开始“编译”你的Prompt:从AST解析视角重构智能代码生成工作流(含Python/TypeScript双语言Prompt IR中间表示规范)

第一章&#xff1a;智能代码生成Prompt工程指南 2026奇点智能技术大会(https://ml-summit.org) 高质量Prompt是驱动智能代码生成模型产出可运行、可维护、符合上下文语义的关键杠杆。与通用文本生成不同&#xff0c;代码生成对结构精确性、语法合法性、边界条件覆盖及API兼容…...

Vue3数字动画实战:用vue3-count-to打造数据大屏动态效果(附完整代码)

Vue3数字动画实战&#xff1a;用vue3-count-to打造数据大屏动态效果 数据可视化大屏已经成为企业展示核心指标的重要窗口&#xff0c;而动态数字效果则是其中最抓眼球的元素之一。想象一下&#xff0c;当领导带着客户参观时&#xff0c;大屏上的关键数据从0开始流畅增长到百万级…...