maven依赖的详解说明
转自:
http://www.java265.com/Maven/202204/3219.html
下文笔者讲述maven依赖范围的简介说明
maven依赖范围简介
在maven依赖时,其坐标后面跟上scope里面的值 我们称之为依赖范围: 它用于控制依赖,编译,测试,运行 依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系。具体的依赖范围有如下6种:
依赖范围 | 备注说明 |
compile | 默认编译依赖范围,对于编译,测试,运行三种classpath都有效 |
test | 测试依赖范围,只对于测试classpath有效 |
provided | 已提供依赖范围,对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,如servlet-api |
runtime | 运行时提供,如:jdbc驱动 |
system | 系统范围,自定义构件,指定systemPath;跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它 |
import | 只使用在<dependencyManagement>中,指从其它的pom中导入dependency的配置 |
传递性依赖
如: C依赖B B依赖A 则称C对B是第一直接依赖,B对A是第二直接依赖,C对A是传递依赖
可选依赖
在依赖节点dependency中 <optional>属性 可控制当前的依赖是否向下传递 默认值为false,表示向下传递
例:A项目依赖于log4j,B项目依赖于A项目 如果在A中对log4j依赖的optional配置成false时 B项目中自动传递依赖于log4j。否则反之。
项目A配置slf4j的依赖并设置optional为true <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> <!-- 配置为true时不向下传递此依赖,默认为false --> <optional>true</optional> </dependency> 配置项目B依赖于项目A,检查项目B的依赖包 <!-- 依赖于A --> <dependency> <groupId>com.yiidian</groupId> <artifactId>A</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> 此时可以看出B项目没有依赖slf4j-log4j12
依赖冲突
当一个jar在直接或间接依赖同一坐标的不同版本的资源时,此时以就近原则依赖指定jar包 如:
A-->B-->C-->D-->X(1.9) A-->D-->X(2.0) 1.根据就近原则,此时A会依赖X的2.0版本 2.当依赖中存在两个相同的坐标时,则以顺序下方的版本为准
例:
当一个pom.xml引入两个相同的jar时,此时会 引入3.5.8的mybatis
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.8</version> </dependency>
排除依赖
在pom中的依赖节点中 当引入的依赖包含了很多其它的传递依赖 同此时项目中依赖的jar包不符,此时我们需排除这些依赖,该如何操作呢? 下文笔者将一一道来,如下所示: 使用 <exclusions> 然后再添加 <exclusion>可排除指定的jar
例:
使用exclusion排除spring-plugin中的spring-core依赖
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>3.2.23.1</version> <exclusions> <!-- 排除spring-core的传递依赖 --> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.2.0.RELEASE</version> </dependency>