一、坐标。
1. 什么时Maven坐标。
在引入Maven坐标概念之前,我们开发中需要用到组建依赖的时候就需要手动去相关网站去下载这些包,一个项目会用到大量不同的依赖包一一去下载会占用大量的时间,这个工作就可以交给机器来完成。通过Maven的坐标可以将任何组建进行唯一标示,方便用户自动化下载。
2. 坐标的详解
Maven坐标所包涵的元素有:groupId、artifactId、version、packaging 、classifier。
- groupId —— 当前Maven项目隶属的实际项目
- artifactId —— 实际项目中的一个Maven子项目(模块),推荐使用项目名作为前缀
- version —— 当前所处的版本
- packaging —— 打包方式
- classifier —— 构建输出的一些附属构建
上述属性中,groupId、artifactId、version是必须定义的,packaging是可选定义的,classifier是不能直接定义的。
二、依赖。
1. 依赖的元素
在根元素project下的dependencies可以包涵一个或多个dependency依赖元素,其中包涵的元素除了groupId、artifactId、version以外,还有以下几个元素:
- type —— 依赖的类型,对应项目坐标的packaging
- scope —— 依赖范围
- optional —— 标记依赖是否可选
- exclusions —— 用来排除依赖性传递
2. 依赖的范围
在之前写的中提到的JUnit依赖范围是test,依赖范围共有以下几种:
- compile —— 编译依赖范围。
- test —— 测试依赖范围。
- provided —— 已提供依赖范围。
- runtime —— 运行时依赖范围
- system —— 系统依赖范围。
- import —— 导入依赖范围
依赖范围与classpath的关系
依赖范围 | 对与编译 | 对于测试 | 对于运行时 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | - | Y | - | JUnit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动实现 |
system | Y | Y | - | 本地仓库之外 |
3. 依赖性传递