Maven依赖详解

Maven依赖是何物,IDEA怎么配置Maven依赖,Maven依赖怎么操作 4. Maven中管理依赖 4.1 介绍 依赖是一个项目运行时所需要的各种资源文件的配置信息,如版本号,群组等信息 4.2 配置格式 一般是在Maven构建项目中的pom.xml文件中来进行配置,主要格式如下: <!--所有的依赖都配置在这对dependencies标签中间--> <dependencies> <!--一对dependency标签就是一组具体依赖--> <dependency> <!--以下3种标签就是依赖的坐标--> <gr 阅读详情

本篇目标:通过讲解maven依赖范围、传递性依赖、可选依赖、依赖调节,让大家知道maven依赖的正确使用姿势是什么。

什么是依赖范围

Java在进行代码编译和运行的时候都分别需要指定classpath路径,不然将会出现找不到对应的类。同样的maven默认提供了编译主代码时、测试代码时、运行时的3套classpath。而依赖范围就是用来控制该jar应该被引入哪一个classpath中,maven有以下几种依赖范围:

  • compile

jar包会引入上述声明的3个classpt

  • test

jar包会引入测试代码时的classpath

  • provided

jar包会引入编译主代码时、测试代码时的classpth

  • runtime

jar包会引入测试代码时和运行时的classpath

maven中未指定时默认的依赖范围为compile

什么是传递性依赖

指X->B , B->C ,那么X是否依赖了C呢?如果依赖了那么它的依赖范围又是什么呢?maven对于这几种情况都分别进行的规范定义,如图1-1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VysEZwHP-1599546192903)(https://s2.ax1x.com/2019/06/09/VsGgHO.png)]
最左边一列即为X工程第一直接依赖范围,最上一行为X工程第二直接依赖范围,其它的为X工程最终的传递性依赖范围。举个例子:X->B(依赖范围:compile) , B->C(依赖范围:test) ,那么X对于C的传递性依赖范围是 - ,也就是不传递。
由图1-1我们可以总结如下几点:

  1. 如果第二直接依赖范围为compile,那么传递性依赖范围与第一直接依赖范围是一致的。
  2. 如果第二直接依赖范围为test,那么依赖是不会进行传递的。
  3. 如果第二直接依赖范围是provied,那么只有第一直接依赖范围是provided才会进行传递,其余不会。

什么是可选依赖

我们知道maven的依赖是可以进行传递的,但是对于有一些jar我们是不希望它进行传递的,可以通过**< optional >true< / optional>** 将它标记为可选依赖,那么该依赖将不会被进行传递。

依赖调节

当项目存在这种依赖情况时:X->B,C(1.0版本) , B->C(1.1版本),maven会参照以下两条原则自动进行依赖调节:

  1. 路径最短优先
  2. 路径相同时,采取配置顺序优先

如上情况X工程最终依赖的是C(1.0版本)

我们可以通过现主流的idea来更直观的看看maven是如何进行依赖调节的,假设member-web工程的依赖关系如图1-2
图1-2

根据路径最短优先member-web将会依赖member-dao1:1.0 ,idea的依赖解析插件将会如图1-3进行展示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VuGft0NU-1599546192911)(https://s2.ax1x.com/2019/06/09/Vsabbq.png)]

书写技术文章是一个循序渐进的过程,所以我不能保证每句话、每行代码都是对的,但至少能保证不复制、不粘贴,每篇文章都是自己对技术的认识、细心斟酌总结出来的。乔布斯说:我们在这个星球上的时间都很短,很少有机会去做几件真正伟大的事情,同时要做得好,我必须要趁我还年轻的时候完成这些事。
其实我想说的是,我是一枚程序员,我只想在有限的时间内尽可能去沉淀我这一生中所能沉淀下来的东西


清山绿水始于尘,博学多识贵于勤。

我有酒,你有故事吗?

微信公众号:「Java锦囊」。

欢迎一起谈天说地,聊Java。


Maven系列第3篇:详解maven解决依赖问题 按照如下配置maven的信息,点击“ok”,idea中maven配置完成注意"Maven home directory"选择我们上面安装的3.6.1User settings file 和 Local repository 我们使用用户级别的。 阅读详情

相关推荐

win11本地部署 DeepSeek-R1 大模型!免费开源,媲美OpenAI-o1能力,断网也能用

是否安装成功,然后直接运行部署deepseek-r1的命令。,出现下面界面即为安装成功。在cmd窗口中先输入。

记录学习编程的日常 2992

spring-boot-maven-plugin未指定版本导致的编译错误

spring-boot-maven-plugin未指定版本导致的编译错误 报错 springboot应用在使用maven编译时会报如下错误: Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 [ERROR] Failed to execute goal org.springframework.boot:spring-bo

没啥简介 1万+

AI视频生成成本优化实战:混合架构与硬件选型

AI视频生成技术正面临效果与成本的二元博弈,其核心挑战在于高昂的推理算力消耗与黑箱服务的不确定性。从技术原理看,视频生成依赖扩散模型等深度学习架构,通过多轮迭代实现像素级合成,这导致GPU显存占用和电力消耗呈指数级增长。在工程实践中,采用混合推理架构能有效平衡成本与质量,例如云端处理关键帧配合本地渲染过渡帧,实测可降低58%支出。硬件选型方面,消费级显卡魔改与边缘计算设备为中小企业提供了可行方案,如RTX 3090显存扩容或Jetson AGX边缘部署。当前AI视频应用已渗透电商直播、新闻制作等领域,但需警

weixin_29531177的博客 293

maven依赖机制及依赖管理

maven依赖机制及依赖管理 依赖性传递: 依赖调解: 当项目中出现多个版本构件依赖的情形,依赖调解决定最终应该使用哪个版本。当然,你也可以在项目POM文件中显式指定使用哪个版本。从Maven 2.0.9开始,POM中依赖声明的顺序决定了哪个版本会被使用,也叫作”第一声明原则”。 “短路径优先”意味着项目依赖关系树中路径最短的版本会被使用。例如,假设A、B、C之间的依赖关系是A-&...

zhendong_Z 1497

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南)

本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。

weixin_26821003的博客 274

Image Sensor常见分辨率下HTS,VTS设置

image sensor,HTS,VTS

propor的专栏 4974

maven版本设置不一致,可能出现的问题

可能会先出现第一个问题,解决后,出现第二个,解决后,出现第三个。

m0_53309131的博客 600

谷歌学术用publish-or-perish来对引用量排序

用谷歌学术搜索文献的时候发现不能按照引用量高低进行排序,网上提供了这个软件。 下载地址如下:Publish or Perish (harzing.com)https://harzing.com/resources/publish-or-perish 关于软件界面页面和各种指标的介绍,可以参考中科大的这个PPT: 文献分析软件——publish or perish(精品·公开课件).ppt (book118.com)https://max.book118.com/html/2018/1124/813

m0_48878989的博客 1万+

maven的pom.xml的依赖,不写版本号

xxx_core.xml: <modules> <module>xxx-elasticsearch</module> ... </modules> <packaging>pom</packaging> <name>xxx-core</name> <description>xxx project for Spring Boot</de

weixin_42221156的博客 1万+

OFDR解调全同弱反射光纤阵列

全同弱反射光纤光栅阵列是在一根光纤上密集刻写波长相同的WFBG,由于每个光栅的反射都比较弱,可实现一根光纤上复用成千上万个光栅,阵列上每个光栅栅区长度相同,相邻光栅之间栅距相同,呈周期性分布。2、获取测量信号:对弱栅阵列加载状态下,使用OFDR系统再次获取弱栅时域曲线,为测量信号。(这里需要注意的是对弱栅阵列加载后,不能使弱栅中心波长漂移到激光器波长扫描范围之外,若超出范围则OFDR技术不能获取弱栅反射信号,因此在选择弱栅阵列波长时尽量让其中心波长在激光器波长扫描范围中间,确保温度/应变测量范围。

m0_69386663的博客 1956

FastAPI 极简教程(偏实战,一篇搞定)

本文是一篇FastAPI实战教程,通过最少的概念讲解快速掌握FastAPI的核心功能。文章首先介绍FastAPI是基于Starlette和Pydantic的高性能Python API框架,具有自动生成文档、类型驱动校验、异步支持和依赖注入等优势。教程从安装环境开始,演示了如何创建最小项目并编写第一个"Hello World"接口。接着详细讲解了路由参数处理(Path/Query/Body)、Pydantic数据模型校验、响应模型控制、状态码设置等核心功能。在高级功能方面,重点介绍了错误处

AI天才研究院 814

maven

一、Maven介绍 1.1 什么是Maven 1.1.1 什么是Maven ​ Maven是一个项目管理工具,它包含了一个项目对象模型(POM: project Object Model)、一组标准集合、一个项目生命周期(Project Lifecycle)、一个依赖管理系统(Dependency Management System)和用来运行定义在生命周期阶段(phase)中插件(plugin)...

xiaobai_mantou的博客 487

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1997

maven依赖详解

maven简单介绍和依赖冲突解决

微笑听雨 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Maven依赖冲突详解

Maven依赖冲突详解 前言 最近在项目的使用maven过程中,出现了maven依赖包冲突的问题。后续解决了。记下相关的知识点和资料。希望对你有作用。 一、maven依赖处理 1 对依赖的工作模式 当我们引入一个依赖时,maven会导入对应的包,并且该依赖所依赖的所有包都会进行导入,知道没有依赖为止。 2 包冲突 什么是冲突。它的意思就是在用一个项目导入不同版本的相同名的多个包,那么就产生的冲突。而这个冲突就很有可能导致项目无法运行。举个例子A->B->C1.0,D->E->C2.0

Hacah的博客 6218

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

maven依赖总结

1.依赖元素 org.springframework spring-core ${springframework.version} jar compile groupId,必选,实际隶属项目artifactId,必选,其中的模块version必选,版本号type可选,依赖类型,默认jarscope可选,依赖范围,默认compileoptional可

独自登高楼 望断天涯路 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

详解maven依赖问题

文章目录约定配置pom文件maven坐标maven导入依赖的构件maven依赖范围(scope)依赖的传递maven依赖调解功能可选依赖(optional元素)排除依赖参考 约定配置 Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构,如下所示: maven他自己就知道你项目的源码、资源、测试代码、打包输出的位置,这些都是maven规定...

永无止境 712

Maven的依赖

这里写目录标题一. Maven依赖概念1. 依赖的基本配置2. scope:依赖范围配置3. 依赖范围4. 传递性依赖 一. Maven依赖概念 1. 依赖的基本配置 根元素(project)下的dependencies可以包含dependence元素,以声明多个依赖。 每个依赖都包含: 依赖类型 Type:默认为jar 2. scope:依赖范围配置 compile:编译依赖范围 如果没有指定,就会默认使用该依赖范围,使用次依赖范围的maven依赖,对编译,测试,运行三种classpath都有效.

YJiaLiang的博客 3324

Maven 依赖范围和依赖传递详解

Maven 依赖范围和依赖传递详解 18.10.8 松江图书馆 Maven 依赖范围和依赖传递详解 依赖基本配置 依赖范围 依赖传递 maven默认依赖体制 第一原则:以短路径长度为准 第二原则:相同路径长度时,以pom中声明顺序为准 maven pom中配置 exclusion标签 手动去除依赖 dependencyManagement和dependencise的区别 ...

null 4395

Maven中的依赖

如在web开发时,只有在编译和测试时才用到servlet-api,将其设置为此范围,在运行时servlet-api由web容器提供,无须依赖。POM( Project Object Model,项目对象模型 ) 定义了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。对于更大的项目,我们可能需要创建自己的库并在不同的部分使用它的项目。保持项目最新的库JAR文件的正确版本不是一个容易的任务。默认使用此依赖范围,其下的maven依赖,对于编译,测试,运行classpath都有效。典型例子如junit。

qq_63964907的博客 1175

Maven依赖详细理解

Maven依赖理解1 简介2 依赖的配置3 依赖的范围4 传递性依赖4.1 传递性依赖和依赖调解5 依赖调解6 可选依赖7 总结 1 简介  在Maven项目中,有一个核心文件pom.xml。POM项目对象模型定义了项目的基本信息,用于描述心目如何构建,声明项目依赖。  没有任何的实际Java代码,我们就能顶一个Maven项目的POM,这体现了Maven的一大优点,它能让项目对象模型最大程度地与实...

不当初 1万+

Maven依赖传递

Maven 依赖传递是 Maven 的核心机制之一,它能够一定程度上简化 Maven 的依赖配置。

逍遥人世欢 1485
上一篇: ThreadPoolExecutor入门级
下一篇: ThreadPoolExecutor最佳实践--如何选择线程数
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值