maven学习--核心知识点(坐标和依赖管理)

maven坐标

坐标
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。
Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范
拥有了统一规范,就可以把查找工作交给机器

在配置文件pom.xml中配置
maven坐标的主要组成
groupid:定义当前maven组织名称
artifactid:定义实际项目名称
version:定义当前项目的当前版本

依赖管理

这里写图片描述
依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动

依赖具有传递性
A、B、C

B工程依赖A工程,C工程依赖B工程,那么B工程是C工程的直接依赖,A工程是C工程的间接依赖

依赖传递范围
这里写图片描述

左边第一列表示第一直接依赖范围
上面第一行表示第二直接依赖范围
中间的交叉单元格表示传递性依赖范围

 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
 当第二直接依赖的范围是test的时候,依赖不会得以传递。
 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;

依赖冲突

在maven中存在两种冲突方式,一种是跨pom文件的冲入,一种是同一个pom文件中的冲突
(遵循就近原则,离谁近就用谁的版本)
跨pom文件的冲突
MavenFirst的pom文件中依赖来junit的4.9版本,MavenSecond依赖MavenFirst,MavenThird依赖MavenSecond,则MavenSecond和MavenThird中都是使用了4.9版本。
如果MavenSecond中依赖Junit的4.8版本,则MavenThird也依赖Junit4.8版本

同一个pom文件内的冲突
根据就近原则,写在越下面的依赖,越近.

可选依赖
Optional标签标示该依赖是否可选,默认是false.可以理解为如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去.

依赖排除
exclusions标签用来排除依赖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值