目录
1. 何为依赖
当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。Maven解析依赖信息时会到仓库中查找被依赖的jar包。
2. maven项目加载依赖的顺序
-
先到本地仓库中根据项目坐标找依赖
-
找不到的话会在远程仓库下载
-
下载到本地仓库
3. Maven的依赖范围
Maven的依赖范围包括: compile、provide、runtime、test、system
以下为对应的范围与详细表述
范围 | 表述 |
---|---|
compile | 表示编译范围,指A在编译时依赖B,该范围为默认依赖范围。 编译范围的依赖会用在编译,测试,运行,由于运行时需要, 所以编译范围的依赖会被打包 |
provide | provide依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。 例如:sevlet api 被Tomcat容器提供了 |
runtime | runtime依赖在运行和测试系统时需要,但在编译时不需要。 例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包 |
test | test 范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。 例如:Junit,由于运行时不需要,所以test范围依赖不会被打包 |
system | system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。 一般不推荐使用 |
依赖一览表
依赖范围 | 编译 | 测试 | 运行时 | 是否会被打入jar包 |
compile | √ | √ | √ | √ |
provided | √ | √ | × | × |
runtime | × | √ | √ | √ |
test | × | √ | × | × |
system | √ | √ | × | √ |
4. Maven的依赖范围配置
在pom文件中配置scope
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>compile</scope>
</dependency>