maven学习笔记(五) maven的依赖

来源:互联网 发布:关口知宏 对中国评价 编辑:程序博客网 时间:2024/06/05 21:57

完整的标签

之前记录了maven最基本的坐标,maven坐标都是放在dependency标签内的,表示该项目需要依赖于这个jar包。一般来讲,groupId,artifactId,version是最基本dependency元素,一个完整的dependency标签包含以下元素:

      <dependency>          <groupId>...</groupId>          <artifactId>...</artifactId>          <version>...</version>          <type>...</type>          <scope>...</scope>          <optional>...</optional>          <exclusions>              <exclusion>                ...              </exclusion>          </exclusions>      </dependency>

下面是上一篇没有讲到的几个标签的含义:

标签 含 义 type 构件的打包类型,一般情况不用声明,默认值是jar scope 坐标的依赖范围 optional 依赖是否可选 exclusions 排除依赖性传递

依赖范围

在maven项目中,会有三套classpath可以使用,classpath的作用就是告诉java环境,在哪些目录下可以找到所需要的jar包。这三种分别是编译、测试和运行。scope的取值范围有一下几个:yes表示当前环境可用

scope 编译 测试 运行 compile yes yes yes test yes provided yes yes runtime yes yes system yes yes

compile 是默认的范围,也就是说我们不配置的话,默认是所有环境都可以使用的,但是比如说juint我们一般只会在测试用到我们就可以设为test。

传递性依赖

传递性依赖的概念很简单,如下图,如果我的项目依赖jarB比如说是spring-webmvc而jarB又需要jarC比如spring-core才能运行,这样的依赖就叫传递性依赖。不过使用maven不用担心这个,maven会自动将依赖的jar导入进来。避免我们手动操作带来的麻烦,因为有时候我们不知道jar之间的依赖关系。

这里写图片描述

当jarB与jarC的依赖范围不同时,往往会取较小的为传递依赖的范围,参照上面的表格,比如jarB的依赖范围是compile,而jarC的依赖范围是runtime,那么最后传递依赖的范围就是runtime,不过我们一般都默认使用compile,所以传递依赖不太会碰到范围的问题。

依赖路径选择原则

因为仓库中很多jar都是依赖的,所以有时候会出现不同路径的传递性依赖,比如下面的这种情况。

这里写图片描述

项目A传递性依赖D,maven就有三种路径可以选择,maven选择的原则是这样的:
1.路径短的优先,就排除了路径1;
2.长度相同的情况下,根据POM中声明依赖的顺序,如果E中先声明依赖D那就选路径2.

可选依赖

可选依赖适用于下面这种情况,B同时依赖于C和D,这时候在项目B的POM中,C,D的依赖配置中就会有optional标签,并且值为true。有些时候只需要其中一个就可以了,又或者C、D相互冲突,这时候我们就要进行选择。这个时候我们就要显式地在项目A的pom声明我们要用的C或者D。

这里写图片描述

排除依赖

exclusion标签是用来排除依赖的,想下面这种情况。本来B默认是依赖C的,但是我们想让他依赖D,不使用C。我们就需要在exclusion标签中写入C的依赖坐标,然后自己声明想要的D。

这里写图片描述

      <dependency>          <groupId>xxx</groupId>          <artifactId>B</artifactId>          <version>1.0.0</version>          <exclusions>              <exclusion>                  <groupId>xxx</groupId>                  <artifactId>C</artifactId> <!--没有version-->              </exclusion>          </exclusions>      </dependency>      <dependency>          <groupId>xxx</groupId>          <artifactId>D</artifactId>          <version>1.0.0</version>      </dependency>

maven 查看依赖的命令

命令 含义 mvn dependency:list 查看项目解析依赖 mvn dependency:tree 查看项目依赖树 mvn dependency:analyze 分析项目依赖
原创粉丝点击