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

maven坐标

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

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

依赖管理

maven学习--核心知识点(坐标和依赖管理)_第1张图片
依赖范围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工程的间接依赖

依赖传递范围
maven学习--核心知识点(坐标和依赖管理)_第2张图片

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

 当第二依赖的范围是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标签用来排除依赖

你可能感兴趣的:(maven学习)