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

Maven - 依赖范围和传递依赖

Maven依赖范围 在pom.xml文件,有个节点是scope,用来表示依赖范围。...Maven传递依赖 什么是传递依赖 有时候我们在pom.xml文件引入依赖,其本身就需要依赖于其他依赖,这时候我们不需要去考虑这些依赖Maven会解析各个直接依赖pom,将那些必要间接依赖...通过传递依赖,我们可以在pom.xml文件少写不少依赖配置 传递依赖依赖范围 假如当前项目为A,A依赖于B,B依赖于C。...此时称A对于B是第一直接依赖,B对于C是第二直接依赖,而A对于C是传递依赖。只要知道B在A项目中scope,就可以知道C在Ascope。...其依赖范围如下: 表格第一列是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不会直接提示错误,而是用一套规则来进行 依赖调解。

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

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

今天讲讲如何管理依赖,及依赖范围、传递性等特征。 添加依赖 下面我添加了一个spring-web依赖maven就会去下载spring-webjar包及它依赖一些jar包。...什么是依赖范围就是指定你这个jar包在哪个阶段时才有效。 compile - 编译依赖范围。默认范围,可以不填,表示在所有过程中都有效,如编译期、测试过程、运行期间等。...Maven2.0.9之后新增范围,只能用在,并且导入type为pom类型父工程配置,一般用来解决多继承问题。...依赖传递 依赖传递前面讲过通过继承和聚合方式可以达到,通过继承方式可以轻松从父项目继承过来,通过聚合方式也可以间接传递过来。...依赖排除 在依赖传递过程,如A依赖B、S2.0,B依赖C、S1.0,这样A就有了S1.0和S2.0两个依赖,这样某些情况下会造成冲突需要手动把B间接传递过来依赖排除掉,就是不依赖B带过来S1.0

1.1K120

Maven依赖管理

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

75520

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

场景 A有这样依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A传递依赖,但是两条依赖路径上有两个版本X,那么哪个X会被Maven解析使用呢?...这个方法,以访问者方式序列化依赖关系,这里面用到visitor 是 BuildingDependencyNodeVisitor ,可以回到 maven-dependency-tree 项目查看调用链加以印证...,准备生成结果: 可以看到,只有 isActive 依赖才会被收集到结果,也就是最终起作用依赖版本。...小结 至此,我们已经知道了路径最近者优先原则运行原理:依赖解析是一种深度遍历过程,每当解析一个依赖后,均会将其放到 resolvedArtifacts 这个Map,后续再看到同名依赖时,进行冲突调解...扩展一下:上述分析过程,我们看到了 ConflictResolver 这个接口,发现它是专门进行依赖调解,不同调解方式应该就是由具体实现类来处理。

53130

Maven - 全面解析 Maven BOM (Bill of Materials):打造高效依赖管理与模块化开发

What’s BOM BOM(Bill of Materials) 是由Maven提供功能,它通过定义一整套相互兼容jar包版本集合,使用时只需要依赖BOM文件,即可放心使用需要依赖jar包...定义jar包版本之间兼容性。...1.1版本; 项目C 1.2依赖项目D 1.3版本; 在该例,项目A对于项目D依赖就会出现冲突,按照maven dependency mediation规则,最后生效可能是:项目A中会依赖到项目...D1.1版本(就近原则,取决于路径和依赖先后,和Maven版本有关系)。...它定义了将在库创建所有构件版本。希望使用该库其他项目应在其 pom 依赖管理部分导入此 pom。 POM 文件不仅仅是依赖关系。

96520

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 去约束否则就会产生 版本依赖传递问题。...解决方法 在引入它依赖下面 排除掉冲突依赖 com.xxx xxx</artifactId

3K00

Maven pom 配置依赖机制

--当计算传递依赖时, 从依赖构件列表里,列出被排除依赖构件集。即告诉 maven 你只依赖指定项目,不依赖项目的依赖。...--可选依赖,如果你在项目 B 把 C 依赖声明为可选,你就需要在依赖于B项目(例如项目A)显式引用对C依赖。可选依赖阻断依赖传递性。...Maven 通过自动包含可传递依赖关系,避免了发现和指定您自己依赖关系所需需要。...└── D 1.0 │ └── D 2.0 maven 依赖使用总结 直接依赖: 直接依赖优先于传递依赖,如果传递依赖jar包版本冲突了,那么可以自己声明一个指定版本依赖jar,即可解决冲突...一个项目使用这些库一个或多个构件是相当常见。但是,有时很难使用工件使项目中版本与库中分发版本保持同步。 项目的根源是 BOM POM。它定义了将在库创建所有工件版本。

1.7K40

Maven依赖管理 - 引入依赖

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

1.5K10

Maven依赖配置

文章目录 一、Maven使用 二、依赖配置 三、依赖范围 一、Maven使用 <?xml version="1.0" encoding="UTF-8"?...groupId定义了项目属于哪个组,随意命名,比如谷歌公司myapp项目,就取名为 com.google.myapp artifactId定义了当前Maven项目在组唯一ID,比如定义hello-world...version指定了项目当前版本9.0.1,SNAPSHOT意为快照,说明该项目还处于开发,是不稳定。...—主要用于排除传递依赖-->                   …           <artifactId...大部分情况下,该元素不必声明,其默认值为jar scope:依赖范围 optional:标记依赖是否可选 exclusions:用来排除传递依赖 三、依赖范围 依赖范围就是用来控制依赖和三种classpath

82840

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依赖优先原则

management 里面的依赖 parent 直接依赖 parent 间接依赖 parent 依赖管理 bom 直接依赖(一般没有) bom 间接依赖(一般没有) bom 依赖管理 PS...:bom 就是工程项目中最外层主 POM ,也就是 dependencyManagement 那个 POM 一、 MAVEN 依赖三大原则 1.1 最短路径优先原则 Maven 依赖遵循最短路径优先原则...Maven 依赖遵循 POM 文件申明顺序优先原则,当项目里存在直接依赖 C-api-1.0 和 B-api-1.0 其中存在如下间接依赖关系:C-api-1.0 —> A-api-2.1 B-api...三、Maven 依赖加载流程 Maven 依赖加载流程如下 首先,将 parent 直接依赖,间接依赖,还有依赖管理,插入本项目,放入本项目的直接依赖,间接依赖还有依赖管理之前。...期间对 maven 冲突导致常见报错进行讲解方便我们在开发过程快速定位问题。

95331

maven依赖scope=compile和provided区别

scope其他参数如下 compile 默认scope,表示dependency(依赖)都可以在生命周期中使用。而且,这些dependencies 会传递依赖项目中。...system跟provided 相似,但是在系统要以外部JAR包形式提供,maven不会在repository查找它 解释: 对于scope=compile情况(默认scope),也就是说这个项目在编译...做一个实验就可以很容易发现,当我们用maven install生成最终构件包ProjectABC.war后,在其下WEB-INF/lib,会包含我们被标注为scope=compile构件jar...今天开发web时候,需要用到servlet-api,于是在pom.xml添加依赖 javax.servlet <artifactId...:tomcat也有servlet-api包,这样,发生了冲突 解决方法:添加provided,因为provided表明该包只在编译和测试时候用,所以,当启动tomcat时候,就不会冲突了,完整依赖如下

1.4K20
领券