首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Maven - 依赖范围和传递依赖

Maven依赖范围 在pom.xml文件中,有个节点是scope,用来表示依赖范围。...Maven传递依赖 什么是传递依赖 有时候我们在pom.xml文件中引入依赖,其本身就需要依赖于其他依赖,这时候我们不需要去考虑这些依赖Maven会解析各个直接依赖pom,将那些必要间接依赖...,以传递依赖形式引入到当前项目中。...通过传递依赖,我们可以在pom.xml文件中少写不少依赖配置 传递依赖依赖范围 假如当前项目为A,A依赖于B,B依赖于C。...其依赖范围如下: 表格第一列是B在A中依赖范围,第一行是C在B中依赖范围,交叉格子是C在A中依赖范围;下表中-表示不传递依赖

1.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

说说maven依赖冲突,依赖调解,依赖传递依赖范围

maven依赖冲突之前需要先说说maven 依赖传递依赖传递 当前项目引入了一个依赖,该依赖依赖也会被引入项目。...更加准确说法是,maven会解析直接依赖POM,将那些必要间接依赖,以传递依赖形式引入到当前项目中。 为什么说是’必要间接依赖‘呢?这是因为不是所有的间接依赖都会被引入。...依赖冲突和依赖调解 真是因为依赖传递,所以才带来了依赖冲突可能。比如A->X(1.0),A->B->X(2.0)。A直接依赖了1.0版本X,而A依赖B依赖了2.0版本X。...如果依赖范围合适的话,B中依赖X也是会传递到A项目中。而两个X版本不一致,这就产生了依赖冲突。 在依赖冲突发生时,maven不会直接提示错误,而是用一套规则来进行 依赖调解。...大部分情况下maven这种自动依赖调解能帮我们解决问题了。但是有时候我们不得不手动处理依赖冲突。这种冲突可能不是同一个依赖不同版本(这个依赖调解能搞定),而是不能同时出现两个依赖

1.2K30

maven版本依赖冲突问题

在使用maven构建依赖时候,发现springBoot版本和导入依赖版本 spring-context 版本出现冲突。...image.png 要引入依赖,它所依赖spring-context版本为3.24 我springboot 主版本较高2.18 它spring-context为5.19 因此在被依赖版本和...自己springboot 版本都出现了冲突提示 image.png 要知道sping-context 下包含了很多依赖 如core aop beans 等 因此他们都会有版本冲突。...解决办法 出现这种问题办法首先是因为 依赖上传者 没有约束自己引入依赖 比如 在它引入时候要将 optional 去约束否则就会产生 版本依赖传递问题。...可以不填写版本号,会根据被引入项目版本号进行导入。

3K00

Maven精选系列--依赖范围、传递、排除

今天讲讲如何管理依赖,及依赖范围、传递性等特征。 添加依赖 下面我添加了一个spring-web依赖maven就会去下载spring-webjar包及它依赖一些jar包。...Maven2.0.9之后新增范围,只能用在中,并且导入type为pom类型父工程配置,一般用来解决多继承问题。...依赖传递 依赖传递前面讲过通过继承和聚合方式可以达到,通过继承方式可以轻松从父项目继承过来,通过聚合方式也可以间接传递过来。...继承:A继承B,A就可以继承Bdependencies依赖。 聚合:A依赖C,C依赖D,那么A就要依赖D自然也就获取了D依赖。 下面这是dubbo直接依赖和所有间接依赖关系列表。...依赖排除 在依赖传递过程中,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来依赖排除掉,就是不依赖B带过来S1.0

1.1K120

Maven 依赖调解源码解析(三):传递依赖,路径最近者优先

场景 A有这样依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A传递依赖,但是两条依赖路径上有两个版本X,那么哪个X会被Maven解析使用呢?...2、如果重复声明依赖版本号不同,那么 state 是 OMMITTED _FOR_CONFLICT,意味着冲突,最终必然只会选其中一个。...,准备生成结果: 可以看到,只有 isActive 依赖才会被收集到结果中,也就是最终起作用依赖版本。...就让我们看看都有哪些具体依赖调解器: 上图结合源码可以看到,总共有4种调解器,分别是: 版本最老者优先 版本最新者优先 路径最近者优先(还有一个默认调解器继承了它,但实现是空,已经被打了 @Deprecated...比如Maven 有插件可以将版本更新到最新,应该就是用了 NewestConflictResolver 这个版本最新者优先调解器,本文不再探索,有兴趣读者自行研究。

53830

Maven依赖管理 - 引入依赖

Maven依赖管理 - 引入依赖 依赖管理(引入依赖) 1.目标 能够掌握依赖引入配置方式 2.路径 导入依赖 导入依赖练习 依赖范围 3.讲解 3.1导入依赖 导入依赖坐标,无需手动导入jar包就可以引入...在pom.xml中使用标签引入依赖。 做项目/工作里面 都有整套依赖, 不需要背诵. 或者可以去Maven官网找, 复制,粘贴即可....例如:我们查找一下 junit 坐标依赖, 访问 https://mvnrepository.com/ image-20201213195704285 image-20201213195812875...--引入servlet依赖--> <!...image-20201213200903462 其中范围说明如下: compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖 例如:strus-core、spring-beans

1.5K10

Maven 依赖调解源码解析(六):dependencyManagement 版本锁定

简单翻译一下,使用 dependencyManagement 声明依赖若指定了版本,可以: 指定传递依赖版本(即使传递依赖有自定义版本,也会被覆盖掉); 当直接依赖没有指定版本时,指定其版本...当然,如果使用 dependencyManagement 声明依赖没有指定版本传递依赖自定义版本就会生效了。...我们场景,显然对应着第一种描述:dependencyManagement 可以指定传递依赖版本(即使传递依赖有自定义版本,也会被覆盖掉),其实就是版本锁定概念了。...那回到 Maven 核心项目,看看 includeArtifact 方法被哪里调用了: 继续顺着调用链往上找, 看到很奇怪现象,C 依赖 X 变成 2.0 版本了,但是 C 中明明是 X(1.0...小结 依赖解析过程中,会解析 dependencyManagement 定义依赖版本,如果解析到了,会以 dependencyManagement 重定义依赖版本为准,也就是我们常提到版本锁定。

74130

解锁 Maven 智慧:依赖冲突纷争下版本调停者

在这篇文章中,我们将揭开 Maven 这位“版本调停者”神秘面纱,深入探讨如何在版本纠纷盛宴中解决依赖问题。Maven版本裁判Maven,就像是项目的裁判,负责处理各种依赖版本之间纠纷。...传递依赖原则这个原则涉及到依赖传递性。如果一个库被多个依赖传递引入,Maven 会选择其中一个版本。这通常遵循前述最短路径优先原则。例如:<!...结语Maven,这位版本裁判,在依赖冲突领域展现了它智慧和机智。...通过最短路径优先、最先声明优先、传递依赖原则以及排除传递依赖等策略,Maven 在项目中解决了版本纷争,确保了项目的稳定构建。在你软件开发旅程中,不要被依赖冲突问题所困扰。...理解 Maven 解决策略,善用依赖范围,规避传递依赖陷阱,是每个开发者都应该掌握技能。愿你项目构建顺利,版本纷争不再是无解难题,而是一场被明智处理盛宴。

25510

maven子pom没有继承到父pom依赖版本

maven Java项目很多都会有子module,一般父项目没有逻辑代码,在父项目pom.xml中注明依赖、version和其他一些公用东西,子modulepom继承父pom,子pom就不用写依赖版本了...,但至少也要写用到依赖groupId、artifactId,这样默认会使用父项目依赖版本。...pom中版本了 dependencyManagement:像上面提到,一般在父项目中会声明这个元素,和普通依赖用法类似,这个元素并不会真的引入依赖,只会标明依赖版本,子项目会从父项目找 org.projectlombok...,找不到再从远程仓库找 经过 maven3.6版本测试,似乎没有relativePath标签时,它没有从当前pom文件上一级目录找,子模块继承不到父模块中dependencyManagement中包

4.1K20

Maven 依赖调解源码解析(四):传递依赖,第一声明者优先

场景 路径最近者优先原则不能解决所有问题,比如这样依赖关系:A-> C->X(1.0)、A->D->X(2.0),X(1.0)和 X(2.0)依赖路径长度是一样,都为 2。...在 Maven 2.0.8 及之前版本中,这是不确定,但是从 Maven 2.0.9 开始,为了尽可能避免构建不确定性,Maven 定义了依赖调解第二原则:第一声明者优先。...在依赖路径长度相等前提下,在 POM 中依赖声明顺序决定了谁会被解析使用,顺序最靠前那个依赖优胜。该例中,C 依赖声明在 D 之前,那么 X(1.0)就会被解析使用。...基于前面的分析,很可能进入了这段代码: 那自然而然,resolved 就是 X(1.0),我们直接进入源码分析: 很明显看出,如果两个依赖路径深度相同,保留最先声明依赖。...这个「小于等于」就很有灵性,同时实现了传递依赖路径最近者优先和第一声明者优先这两个原则。

50120

Maven依赖管理

依赖配置 2. 依赖传递 2.1 依赖传递冲突问题 2.2 可选依赖 2.3 排除依赖 3. 依赖范围 4. 依赖范围传递性 1....依赖传递 直接依赖:在当前项目中通过依赖配置建立依赖关系 间接依赖:项目的依赖如果依赖其他资源,当前项目间接依赖其他资源 2.1 依赖传递冲突问题 路径优先:当依赖中出现相同资源时,层级越深,优先级越低...,层级越浅,优先级越高 声明优先:当资源在相同层级被依赖时,配置顺序靠前覆盖配置顺序靠后 特殊优先:当同级配置了相同资源不同版本,后配置覆盖先配置(在一个pom中) 2.2 可选依赖 可选依赖指对外隐藏当前所以来资源...排除依赖指主动断开依赖资源,被排除资源无需指定版本–不需要 junit junit</artifactId...依赖范围传递性 带有依赖范围资源在进行传递时,作用范围将受到影响 到此,本章内容就介绍完啦

75520
领券