Maven依赖
依赖管理
项目依赖管理 ,pom.xml
文件中定义jar包的GAV坐标,
<dependencies>
<dependency>
<!--依赖 GAV坐标-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<!--依赖范围-->
<scope>test</scope>
</dependency>
</dependencies>
依赖范围(scope)
依赖范围用于限制依赖的环境应用,指定何时提供依赖及分类路径
依赖范围值(scope) | 说明 |
---|---|
compile(默认值) | 项目的所有类路径中提供 (为所有类编译提供依赖) |
provided | 编译和测试时需要,jar包不进行打包 (以防运行环境已经存在相同的包发生冲突) |
runtime | 测试、运行时需要 |
test | 测试时需要,但不进行打包 |
··· | ··· |
依赖范围 | 主类编译路径 | 测试编译路径 | 打包且编译时有效 |
---|---|---|---|
compile | Y | Y | Y |
provided | Y | Y | - |
runtime | - | - | Y |
test | - | Y | - |
依赖传递
在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖,项目会自动引入依赖中的依赖!
假设 A项目 引入 B 和 E 依赖 ,他们有各自的依赖关系
A => B
B => C
C => D
A => E
E => D
A项目
|
├── B
│ └── C
│ └── D(2.0)
└── E
└── D(1.0)
最后 A项目 导入了D(1.0),排除D(2.0)
系统会根据导入的就近原则进行依赖应用
依赖排除
Maven 的依赖传递过程可选择性的排除依赖。如果依赖中有其他依赖可对其进行排除!
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<!--排除依赖无需版本号-->
</exclusion>
</exclusions>
</dependency>
PS:排除依赖包中所包含的依赖关系,不需要添加版本号
假如我想在 上面假设中排除D(1.0),引入D(2.0)
···
<!--引入B依赖-->
<dependency>
<groupId>B</groupId>
<artifactId>B</artifactId>
<version>0.1</version>
<!--排除依赖-->
<exclusions>
<!--排除 B依赖 中的 依赖C-->
<exclusion>
<groupId>D</groupId>
<artifactId>D</artifactId>
<!--排除依赖无需版本号-->
</exclusion>
</exclusions>
</dependency>
<!--引入E依赖-->
<dependency>
<groupId>E</groupId>
<artifactId>E</artifactId>
<version>0.1</version>
</dependency>
···