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

maven依赖管理和传递依赖的版本变更

Maven是一个流行的Java项目构建工具,它通过使用pom.xml文件来管理项目的依赖项。在Maven中,依赖管理是指在项目开发过程中管理和维护项目所需的外部库和组件的过程。

  1. Maven依赖管理概念:Maven的依赖管理使用pom.xml文件来定义项目所需的依赖项。依赖项可以是项目的直接依赖(直接使用的库或组件),也可以是传递性依赖(间接使用的库或组件,由直接依赖项所引入)。通过定义这些依赖项,Maven可以自动下载和管理项目所需的所有库和组件。
  2. Maven依赖的分类:Maven的依赖可以分为三类:compile、test、provided。compile依赖是指在编译、测试和运行时都需要的库或组件;test依赖是指在测试时需要的库或组件;provided依赖是指在编译和测试时需要的库或组件,但在运行时由容器或其他方式提供。
  3. Maven传递性依赖的版本变更:当项目的某个依赖项的版本发生变更时,Maven可以自动解析和处理传递性依赖的版本变更。如果一个依赖项依赖于其他库或组件,并且这些库或组件的版本与项目中其他依赖项的版本发生冲突,Maven将根据一定的规则来解决冲突并选择合适的版本。

在传递性依赖的版本变更中,Maven遵循以下规则:

  • 最短路径优先原则:当多个传递性依赖项都依赖于同一个库或组件,Maven会选择最短路径的依赖项,即依赖关系路径最短的依赖项。
  • 第一声明者优先原则:如果多个传递性依赖项都声明了同一个库或组件的不同版本,Maven会选择最先声明该库或组件的依赖项的版本。
  • 显式声明优先原则:如果某个库或组件在项目的直接依赖项中被显式声明了版本,那么Maven会使用该版本,而不考虑其他传递性依赖项中声明的版本。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云开发平台:腾讯云云开发平台(https://cloud.tencent.com/product/tcb)
  • 云原生容器服务:腾讯云容器服务(https://cloud.tencent.com/product/tke)
  • 云数据库:腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 云服务器:腾讯云云服务器(https://cloud.tencent.com/product/cvm)

请注意,以上推荐的腾讯云产品仅供参考,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

maven依赖冲突之前需要先说说maven 依赖传递依赖传递 当前项目引入了一个依赖,该依赖依赖也会被引入项目。...maven管理着3套classpath,分别是 编译classpath,测试classpath,运行classpath。...结论是:第一直接依赖范围第二直接依赖范围决定了传递依赖范围。...依赖冲突依赖调解 真是因为依赖传递,所以才带来了依赖冲突可能。比如A->X(1.0),A->B->X(2.0)。A直接依赖了1.0版本X,而A依赖B依赖了2.0版本X。...如果依赖范围合适的话,B中依赖X也是会传递到A项目中。而两个X版本不一致,这就产生了依赖冲突。 在依赖冲突发生时,maven不会直接提示错误,而是用一套规则来进行 依赖调解。

1.2K30
  • Maven - 依赖范围传递依赖

    之所以会有依赖范围,是因为Maven在编译、测试运行项目时会各自使用一套classpath,依赖范围就是用来控制这三种classpath。...使用此依赖范围Maven依赖,对于编译、测试、运行三种classpath都有效。典型例子是spring-core,在编译,测试运行时候都需要使用该依赖。 provided 已提供依赖范围。...使用此依赖范围Maven依赖,对于编译测试classpath有效,但在运行时无效。...使用此依赖范围Maven依赖,对于测试运行classpath有效,但在编译时无效。...Maven传递依赖 什么是传递依赖 有时候我们在pom.xml文件中引入依赖,其本身就需要依赖于其他依赖,这时候我们不需要去考虑这些依赖Maven会解析各个直接依赖pom,将那些必要间接依赖

    1.1K10

    Maven依赖管理 - 引入依赖

    Maven依赖管理 - 引入依赖 依赖管理(引入依赖) 1.目标 能够掌握依赖引入配置方式 2.路径 导入依赖 导入依赖练习 依赖范围 3.讲解 3.1导入依赖 导入依赖坐标,无需手动导入jar包就可以引入...在pom.xml中使用标签引入依赖。 做项目/工作里面 都有整套依赖, 不需要背诵. 或者可以去Maven官网找, 复制,粘贴即可....image-20201213200903462 其中范围说明如下: compile 编译、测试、运行,A在编译时依赖B,并且在测试运行时也依赖 例如:strus-core、spring-beans...打到war包或jar包 provided 编译、测试有效,A在编译测试时需要B 例如:servlet-api就是编译测试有用,在运行时不用(tomcat容器已提供)不会打到war runtime:...测试运行有效, 例如:jdbc驱动包 ,在开发代码中针对javajdbc接口开发,编译不用在运行测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要会打到war test:只是测试有效,

    1.7K10

    Maven 依赖管理

    摘要 作为开发者,我们一直使用 Maven 来作为版本依赖管理工具,不过我们经常会遇到依赖冲突等问题,我们这边文章就来明确一下 Maven 是如何管理依赖版本。...Maven 版本结构 Maven版本结构使用如下格式: MajorVersion [ .MinorVersion [ .IncrementalVersion ] ] [ -Qualifier [ -...如果你版本格式不符合这个要求,Maven 会将整个版本看成一个 Qualifier 字符串 版本号也隐含了兼容性 MajorVersion: 修改是非向后兼容,使用新版本以为要做重大改动 MinorVersion...那我们在构建时候,哪些依赖会包含在构建中呢? 这就涉及到Maven依赖选择策略,Maven 有两条依赖选择规则: 1. 距离根节点最近依赖会被选择使用 2....我们可以使用 exclude 方式将 Z 1.0 排除出依赖 总结 Maven依赖管理很灵活,但是当有很多依赖时,很容易会造成依赖选择不正确。

    71020

    Maven 依赖管理

    Maven 坐标 3. 依赖冲突 3.1 冲突产生原因 3.2 解决冲突办法 1....前言 在我们创建使用 Maven 项目的过程中,当需要用到第三方控件时,都是通过依赖管理来达成,也就是 Maven 项目中必有的 pom.xml 文件。...「artifactId」:定义实际项目中一个 Maven 项目(模块),推荐使用实际项目名作为前缀。 「version」:定义 Maven 项目当前所处版本。...依赖冲突 3.1 冲突产生原因 Maven 项目中,通常都会定义血多 dependency,每个 dependency 内部也会定义它 dependency,而有时各个依赖之间会产生冲突,冲突原因通常主要是...「由于 jar 包依赖传递性」,如果在一个项目中同时引入了一个依赖不同版本,就可能导致依赖冲突。

    87920

    【JavaWeb】maven依赖管理

    前言 记录学习JavaWeb课程中部分知识点,包括maven依赖管理maven高阶、Mybatis、SpringBoot自动配置等。本篇是关于maven依赖管理内容。...maven依赖管理 依赖配置 在项目的 pom.xml 中配置对应依赖(当前项目运行需要 jar 包),包括项目组织名、依赖包名及对应版本。... groupidartifactId被统称为“坐标”,是为了保证项目唯一性而提出,如果你要把你项目弄到maven...这个是不允许别人重复,尤其是需要上线项目。一般公司为了不重复都会注册一个域名(URL用那种),这样就肯定不会重复了。...配置完成后,点击maven管理刷新按钮,即可载入对应依赖(从本地仓库引入 或者 从远程仓库下载后引入) 依赖传递 依赖具有传递性 直接依赖:在当前项目中通过依赖配置建立依赖关系 间接依赖:被依赖资源如果依赖其他资源

    18720

    Maven 依赖管理(上)

    Maven 一个核心特性就是依赖管理。当我们处理多模块项目(包含成百上千个模块或者子项目),模块间依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制方法。...---- 可传递依赖发现 一种相当常见情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。 Maven 可以避免去搜索所有所需库需求。...通过可传递依赖,所有被包含图形会快速增长。当有重复库时,可能出现情形将会持续上升。Maven 提供一些功能来控制可传递依赖程度。...功能 功能描述 依赖调节 决定当多个手动创建版本同时出现时,哪个依赖版本将会被使用。 如果两个依赖版本依赖树里深度是一样时候,第一个被声明依赖将会被使用。...依赖管理 直接指定手动创建某个版本被使用。例如当一个工程 C 在自己依赖管理模块包含工程 B,即 B 依赖于 A, 那么 A 即可指定在 B 被引用时所使用版本

    46420

    Maven依赖管理大全

    同一个依赖不同项目之间可能版本也会不一样,无法进行版本统一管理升级。 install时候需要每个项目一个个进行,无法进行统一install操作,项目一多就非常浪费时间。...当然它危害还不止这些,所以我们需要有一个统一依赖管理维护中心,别担心Maven都给我们提供好了。...如果想研究Maven怎么进行依赖才更加合适童鞋,可以下载SpringBoot源码项目,SpringBoot依赖关系就做特别好,这边我也是借鉴SpringBoot依赖关系来进行项目依赖改造。...子项目依赖不要和project-common依赖冲突,否则很容易出现循环依赖。 子项目禁止出现依赖version版本号,统一放在project-parent项目中管理。...总结: 每一个东西都需要管理,项目依赖也不例外。如果放任项目依赖混乱,不进行统一管理,那日后升级项目依赖时候,那将是灾难级

    1.2K20

    Maven依赖管理

    我们开发一个工程需要用到大量得jar包,而这些jar 包就是我们所说得依赖,一个项目可以配置多个依赖。 1、依赖传递 我们来看一下今天用来演示工程。 这个工程它运行需要用到这么多依赖!...因为我们依赖具有传递性,虽然我们ssm 将ssm_02_dao 注释掉了,但是 ssm_01_pojo 也导入了 ssm_02_dao,这就是依赖传递性。 依赖传递性也分为三种。...上面我配置两个junit 版本 ,右边它显示 依赖版本是 4.10。这会不会跟位置有关系,我们将它们两个交换 一下位置。...比如,我现在用mybatis用是2.0版本,但是你用是3.0 版本,那这不就又版本冲突问题了,所以干脆,你那里用啥我不管,但是我这里用啥隐藏起来,你那里看不到,这样不就没有冲突了。...我往下看看这个排除依赖如何使用。 案例 : 4、可选依赖排除依赖区别 若有收获,就点个赞吧

    16930

    Maven依赖管理

    Maven依赖管理我们开发一个工程需要用到大量得jar包,而这些jar 包就是我们所说得依赖,一个项目可以配置多个依赖。1、依赖传递我们来看一下今天用来演示工程。...这说明这个依赖它又依赖了别的东西。小案例:ssmssm_01_pojo我们可以看到ssm ssm_01_pojo 都引入 ssm_02_dao。ssm_02_dao 里面是什么东西呢?...因为我们依赖具有传递性,虽然我们ssm 将ssm_02_dao 注释掉了,但是 ssm_01_pojo 也导入了 ssm_02_dao,这就是依赖传递性。依赖传递性也分为三种。...上面我配置两个junit 版本 ,右边它显示 依赖版本是 4.10。这会不会跟位置有关系,我们将它们两个交换 一下位置。...我往下看看这个排除依赖如何使用。案例 :4、可选依赖排除依赖区别

    39920

    Maven依赖管理

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

    79620

    Maven教程3(依赖管理)

    ----   Maven项目,依赖,构建配置,以及构件:所有这些都是要建模表述对象。这些对象通过一个名为项目对象模型(Project Object Model, POM)XML文件描述。...发布项目有一个固定版本标识来指向该项目的某一个特定版本。而正在开发中项目可以用一个特殊标识,这种标识给版本加上一个"SNAPSHOT"标记。   ...一个项目的 groupId:artifactId:version使之成为一个独一无二项目;你不能同时有一个拥有同样groupId, artifactIdversion标识项目。...] 2.依赖冲突 2.1冲突产生原因 [图片.png]   上图中a jar包通过bd间接依赖c jar包版本不一致,出现了冲突 依赖关系 实例 直接依赖 ab依赖关系 间接依赖 ac依赖关系...排除掉两个冲突中一个,那么另一个就自然使用了 [8g0z1wv6og.png] [eodz5vs5bw.png] [ys67ayx7xh.png] 2.2.4版本依赖 [8t4xqtdisn.png

    70640

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

    场景 A有这样依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A传递依赖,但是两条依赖路径上有两个版本X,那么哪个X会被Maven解析使用呢?... maven-dependency-tree这三个项目中找一下,看看是哪里输出这句话。...那么我们中断此次调试,并在 omittedNode.omitForConflict( kept ) 这里打个断点,重新调试,看看上下文都有什么: 可以看到,要被忽略依赖 要被保留依赖,是由上层传入...,准备生成结果: 可以看到,只有 isActive 依赖才会被收集到结果中,也就是最终起作用依赖版本。...比如Maven 有插件可以将版本更新到最新,应该就是用了 NewestConflictResolver 这个版本最新者优先调解器,本文不再探索,有兴趣读者可自行研究。

    57830

    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 依赖管理最佳实践

    概述 maven 是一个常用 java 跨平台项目管理工具,主要工作是项目构建、依赖管理项目信息管理。...而 maven 可以自动地从清理、编译、测试到生成报告、打包、部署,极大简化了我们日常工作,同时它还是一个依赖管理工具项目信息管理工具,提供了中央仓库,能帮助我们自动下载构件。...本文我们就来重点介绍一下 maven 作为依赖管理项目信息管理工具使用。 2. maven 依赖声明 maven 最强大功能就是项目中依赖管理。...依赖管理 多模块项目中,定义一个主 pom,在主 pom 中使用 dependencyManagement 定义依赖版本依赖排除 子模块从主 pom 中继承依赖,一般情况下,不要在子模块中做依赖排除...归类依赖 如果多个相关依赖版本都是相同,可以使用 properties 元素定义 maven 属性,依赖版本值用这一属性引用表示。

    78810
    领券