MAVEN_依赖管理

来源:互联网 发布:无线传感器网络三要素 编辑:程序博客网 时间:2024/06/04 20:09

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>依赖冲突
 如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则)。
 如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则)。可以理解成最后的修改覆盖了之前的修改。