Maven中的依赖传递
来源:互联网 发布:网络舆情信息综合分析 编辑:程序博客网 时间:2024/06/08 09:36
Maven中的依赖传递
一、依赖范围scope
Maven因为执行一系列编译、测试、和部署等操作,在不同的操作下使用的classpath不同,依赖范围就是控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)的关系。
一共有5种,compile(编译)、test(测试)、runtime(运行时)、provided、system不指定,则范围默认为compile。
- compile:编译依赖范围,在编译、测试、运行时都需要。
- test:测试依赖范围,测试时需要。编译和运行不需要。
- runtime:运行时以来范围,测试和运行时需要,编译不需要。
- provided:已提供依赖范围,编译和测试时需要。运行时不需要。
- system:系统依赖范围。本地依赖,不在maven中央仓库。
二、依赖的传递
A->B(compile) a依赖b
b是A的编译依赖范围,在A编译、测试、运行时都依赖b
B->C(compile) B依赖C
c是B的编译依赖范围,在B编译、测试、运行时都依赖c
当在A中配置
<dependency> <groupId>com.B</groupId> <artifactId>B</artifactId> <version>1.0</version> </dependency>
则会自动导入c包。关系传递如下表:
由上表不难看出,项目A具体会不会导入B依赖的包c,取决于第一和第二依赖,但是依赖的范围不会超过第一直接依赖,即具体会不会引入c包,要看第一直接依赖的依赖范围。
三、以来冲突的调节
A -> B -> C -> X(1.0)A -> D -> X(2.0)
由于只能引入一个版本的包,此时Maven按照最短路径选择导入X(2.0).
A -> B -> X(1.0)A -> D -> X(2.0)
路径长度一致,则优先选择第一个,此时导入X(1.0).
四、排除依赖
A -> B -> C(1.0)
此时在A项目中,不想使用C(1.0),而使用C(2.0)
则需要使用exclusion排除B对C(1.0)的依赖。并在A中引入C(2.0).
pom.xml中配置<!--排除B对C的依赖--><dependency> <groupId>B</groupId> <artifactId>B</artifactId> <version>0.1</version> <exclusions> <exclusion> <groupId>C</groupId> <artifactId>C</artifactId><!--无需指定要排除项目的 版本号--> </exclusion> </exclusions></dependency> <!---在A中引入C(2.0)--><dependency> <groupId>C</groupId> <artifactId>C</artifactId> <version>2.0</version> </dependency>
五、依赖关系的查看
cmd进入工程根目录,执行 mvn dependency:tree
会列出依赖关系树及各依赖关系
mvn dependency:analyze 分析依赖关系
阅读全文
0 0
- Maven中的依赖传递
- 解决maven传递依赖中的版本冲突
- 解决maven【传递依赖】中的版本冲突
- 解决maven传递依赖中的版本冲突
- 解决maven传递依赖中的版本冲突
- 解决maven传递依赖中的版本冲突
- Maven依赖传递
- maven 依赖传递
- maven传递性依赖
- maven 传递依赖
- Maven -- 依赖传递
- maven传递依赖规则
- maven依赖传递关系
- maven依赖传递关系
- 【Maven】传递性依赖
- maven依赖传递
- maven传递依赖范围
- Maven依赖传递
- CodeForces
- Dubbo分布式服务框架简介
- java学习初探6之继承 方法覆盖 多态
- 初识微信小程序第一弹
- 应用程序打包和发布
- Maven中的依赖传递
- Vue.js快速入门及示例
- Java 虚拟机(JVM)
- Linux必杀(十六):打包命令tar
- TCP可靠传输——滑动窗口
- OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系
- 【读书笔记】docker日志与监控
- 浅学springmvc 分发器
- 消息队列MQ技术介绍