依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?
SpringBoot中的起步依赖(starter)是一组特定功能的依赖项集合,SpringBoot通过starter来进行项目的依赖管理,而不是直接基于单独的依赖项来进行依赖管理。
starter其实就是特殊的Maven依赖项或者Gradle依赖项,它把常用的库组合到一起构成了一个特定的功能。
举几个例子:spring-boot-starter-test是集成了测试功能的starter,spring-boot-starter-web是集成了web功能的starter,spring-boot-starter-data-mongodb是集成了MongoDB功能的starter。
starter中的依赖项都是经过官方精心测试的,能够保证相互之间的兼容性,最好不要进行更改。但是对于一些特定的场景、特定的需求来说也会遇到修改依赖项的时候,今天我们简单说一下如何进行修改。
测试目标:spring-boot-starter-web
我们项目里有2个starter,其中一个就是spring-boot-starter-web,我们就以它为目标进行依赖管理的测试。如图:
spring-boot-starter-web
首先我们先通过以下maven命令查看一下spring-boot-starter-web有哪些依赖项。
mvn dependency:tree
spring-boot-starter-web的依赖
从上图中我们可以看出我们项目依赖了spring-boot-starter-web,而spring-boot-starter-web又通过依赖传递依赖了jackson相关的jar包。我们接下来对jackson相关的包进行排除和替换,一起来看下需要什么操作。
排除依赖
如果我们需要把jackson相关的包移除掉该怎么办呢?很简单,直接在maven中通过标签就可以了,如图:
exclusions
然后再查看一下依赖,就发现spring-boot-starter-json下已经没有jackson相关的包了:
排除jackson相关的包
maven的依赖管理原则
在对jackson相关的包进行替换之前,我们先看一下maven在处理依赖时的2个原则。
第一原则:路径最短者优先
比如说A对于C的依赖有2条路径,第一条路径为A->B->C(1.0),第二条路径为A->H->I->C(2.0),因为第一条路径的长度为2,第二条路径的长度为3,所以A采用路径最短的第一条路径下的C(1.0)。
第二原则:第一声明者优先
如果2条路径的长度都一样的话,那么此时第一声明者会被采用。
比如说A对于C的依赖有2条路径,第一条路径为A->B->C(1.0),第二条路径为A->H->C(2.0),此时第一条路径的长度和第二条路径的长度都是2,这个时候如果第一条路径先声明那么对于C的依赖就是1.0,如果是第二条路径先声明那么对于C的依赖就是2.0。
综上所述,大家应该能够发现,maven对于依赖项的管理和依赖项的版本没有关系。
替换依赖
替换依赖从字面上理解很简单,就是取代的意思,但是这里要讲清楚,替换包括高版本替换低版本和低版本替换高版本这两种。
根据maven的路径最短者优先的原则,如果我们想对jackson相关的包进行替换的话,我们直接在maven的pom文件中添加我们需要的特定版本的依赖项就可以了,而不用在意这个版本是更高的版本还是更低的版本,也不用再通过标签排除掉现有的版本,因为我们直接添加的依赖项路径更短。
下图是新添加的jackson相关的依赖,我们把改为更低的版本2.8.11:
2.8.11版本的jackson
新增的jackson相关的依赖
我们再来查看一下依赖发现spring-boot-starter-json下已经没有的jackson相关的依赖,底部则直接添加了我们新配置的2.8.11版本的jackson相关的包。
新增的jackson依赖
需要注意的是这是maven的配置,我们只需添加我们需要的特定版本的依赖项就可以了,而不用担心是更高版本的依赖还是更低版本的依赖,因为我们直接添加的依赖项相对于starter中的依赖项来说路径更短。
但是对于Gradle管理的项目来说并不是这么直接简单,Gradle对于依赖项会优先使用最新的版本。
如果你想用低版本的依赖项,除了需要添加这个低版本的依赖项之外还需要排除掉高版本的依赖项才可以。
结束
今天的内容到此就讲完了,我们讲述了springboot中如何排除特定的依赖,如何替换特性的依赖。另外还讲了maven对于依赖管理的2条原则。
希望这些能够帮助到大家,如果大家有什么疑问欢饮留言哦。
依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?相关推荐
- Java引入依赖aar,如何将JAR依赖项包含到AAR库中
摘要: 我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码. 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,此类库是使用Gradle内 ...
- android添加工程依赖工程,将项目依赖项添加到Android studio中的另一个项目
我有一个现有的项目说A,它依赖于几个项目.现在我想将这个项目A作为Project B的库项目.到目前为止,我所做的是在Project A的build.gradle中,我已将插件从"andro ...
- Java引入依赖aar_java – 如何将JAR依赖项包含到AAR库中
概要: 我有一个取决于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码. 细节: 我有一个Java SDK库项目,其中包含我们用于Java Web项目的代码,而且这个库是使用Gradl ...
- 依赖项出现感叹号怎么办_「电脑常用技巧」不喜欢看到的黄色感叹号
很多人用电脑上网时候,会看到这样一个标识 紧接着,一顿操作加吼叫:为啥上不了网啦啊啊啊啊? 遇到网络图标前加个黄色感叹号该怎么办? 我们讲遇到问题,在不是唯一原因造成的前提下,要先使用一个稳定的解法: ...
- WPF中的依赖项属性
随着WPF的推广,不得不重新拾起WPF来,因为这块的产品越来越多. 只能跟着MSDN来学了,所以想是在这里记录下学习的过程和对知识的理解. 先从最基本的吧,依赖项属性是WPF中不同的地方,先了解一下它 ...
- gradle排除依赖_如何从Gradle中的所有依赖项中排除库
gradle排除依赖 我正在使用Spring Boot. 默认情况下,Spring Boot带有Logback. 我想使用log4j(出于任何原因..) 为了做到这一点,我不得不排除logback并添 ...
- 如何在Gradle多项目构建中管理依赖项
从很早以前我就一直喜欢Gradle构建工具. 它的潜力甚至在1.0版本之前就已经很明显了,那时变化经常被打破. 如今,升级很少会引起意外. 该工具已经成熟并且运行良好. Gradle包括一个功能强大的 ...
- VS中PCL库附加依赖项配置
在VS中使用PCL库通常要经过一些配置,参考https://www.cnblogs.com/blog-vincent-0x1F7/p/9507631.html教程中第一部分PCL安装及在VS2013中 ...
- 使用Maven在jar中包含依赖项
本文翻译自:Including dependencies in a jar with Maven Is there a way to force maven(2.0.9) to include all ...
最新文章
- Rank() over()的用法
- [Spring 深度解析]第2章 Spring基础
- python字符串与文本处理技巧(4): 格式化输出、令牌解析、串上串
- Cpp 对象模型探索 / 含有虚基类的类的内存布局
- 数据库对数字不限长度的冒泡排序
- 自定义parallelStream的thread pool
- html前端页面的基本骨架是,web前端入门到实战:css实现的骨架屏方案
- sql卡住php-fpm会cpu大涨,排查PHP-FPM占用CPU过高
- 使用ctime.h头文件来控制程序延时秒数
- 字节跳动1/3员工不支持取消大小周!库克称iPhone将采用可回收材料生产;清华博士接亲被要求现场写代码|极客头条...
- Springboot devtools热部署Mybatis报错:Could not load [mapper/]
- 基于分解的MOEA的理解
- 千古第一文人苏轼的众CP
- Thinkphp中的 I 函数(Thinkphp3.2.3版本)
- ios浏览器微信支付回调页面_iOS微信支付结果页面返回原程序按钮
- 【技术美术图形部分】2.2 模型与材质基础
- CAD -2012软件安装的讲解
- html5编写微信留言,HTML5春节(支持微信和填写姓名)祝福所有程序员幸福快乐...
- java 正斜杠与反斜杠之分
- tensorflow进阶(更新中...)