1. maven的坐标
maven世界拥有大量构建,我们需要用一个规范(坐标)来作为某个构建的唯一标识(类似于数据库中的主键)。
maven坐标组成:
groupId:定义当前maven项目隶属项目
artifactld:定义实际项目中的一个模块
version:定义项目的当前版本
packing:定义该项目的打包方式
2. 依赖范围
给jar包的作用范围进行限制,根据不同需求,进行不同等级的限制。在pom.xml中的<dependency>
标签下配置<scope>
子标签。
依赖范围(scope) | 对运行主代码(源码) | 对测试代码 | 参与打包 | 例子 |
---|---|---|---|---|
cpmpile(默认值) | 有效 | 有效 | 有效 | log4j |
test | 有效 | Junit | ||
provided | 有效 | 有效 | servlet-api | |
runtime | 有效 | JDBC Driver |
3. 依赖管理
<1>传递性依赖
举个栗子来讲,有三个角色分别为 校长、老师和学生。直接依赖:老师吩咐学生去做事情,对老师而言,学生就是直接依赖。间接依赖:校长吩咐老师去做事情,老师又叫学生去做事情。对校长而言,老师是直接依赖,学生就是间接依赖。
<2>可选依赖
控制当前资源是否向下传递,在pom.xml中的<dependency>
标签下配置<optional>
子标签。其默认值为false,如果配置成true,那么就会使得配置了这个optional的jar包不跟随项目传递而传递。
<3>排除依赖
相对于可选依赖,排除依赖具有主动权,可以自己选择要不要这个jar包,而对于选择依赖就是被动了,自己没有权利选择,人家给你了,你才有排除依赖权,人家不给你jar包,你也没办法选择要还是不要。
<dependencies>
<!-- 设置排除 -->
<!-- 排除依赖必须基于直接依赖中的间接依赖设置为可以依赖为false -->
<!-- 设置当前依赖中是否使用间接依赖 -->
<exclusions>
<!--具体排除-->
<exclusion>
<groupId>cn.itcast</groupId>
<artifactId>One</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<4>依赖冲突
如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则)。
如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则)。可以理解成最后的修改覆盖了之前的修改。