拉勾教育Maven 基础知识依赖机制
传递依赖
maven通过读取分析工程依赖的其他工程的pom文件,自动的把依赖工程对应的依赖(包括这些工程自身的依赖以及从父工程继承到的依赖)加入到当前工程的依赖里面。拉勾IT课小编为大家分解
传递依赖机制虽然可以让我们方便的引入项目需要的全部依赖,但很容易就会使我们工程的依赖变的庞大复杂,并且引入的依赖很可能会同时依赖一个jar包的不同版本。因此maven在传递依赖机制中加入了一些机制来管理终加入到工程中的依赖项
• 依赖仲裁(Dependency mediation)
• 依赖范围(Dependency scope)
• 依赖管理(Dependency management)
• 排除依赖(Excluded dependencies)
• 选择性依赖(Optional dependencies)
依赖仲裁
当在依赖树中出现同一个依赖的多个版本时,依赖仲裁 用来决定终采用哪个版本。
maven采用选择 近 的机制来决定终的版本号, 近 指的是在工程的依赖树中距离当前的工程路径短,这就是为什么我们可以通过在当前工程中声明一个特定依赖,从而复盖传递过来的依赖的原因。如果两个依赖在依赖树中的距离一样,则选择 先 声明的。
1. 场景1 工程A有如下依赖树
2. A
3. ├── B
4. │ └── C
5. │ └── D 2.0
6. └── E
7. └── D 1.0
8.
此时对于D的依赖,有两条路径 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,因为第二条的路径短,所以终选择 D 1.0
9. 场景2 工程A有如下依赖树
10. A
11. ├── B
12. │ └── C
13. │ └── D 2.0
14. └── E
15. └—— F
16. └—— D 3.0
17.
此时对于D的依赖有两条 A -> B -> C -> D 2.0 和 A -> E -> F -> D 3.0,此时两条路径一样长,选择先声明的,所以终选择D 2.0
• 根据 依赖仲裁 的机制,当我们在自己的工程中明确写明一个依赖的版本时,就可以确保这就是终采用的版本。但是有一个例外就是 硬性需求(Hard requirements)优先级总是高于 软需求(Soft requirement) 。
maven通过读取分析工程依赖的其他工程的pom文件,自动的把依赖工程对应的依赖(包括这些工程自身的依赖以及从父工程继承到的依赖)加入到当前工程的依赖里面。拉勾IT课小编为大家分解
传递依赖机制虽然可以让我们方便的引入项目需要的全部依赖,但很容易就会使我们工程的依赖变的庞大复杂,并且引入的依赖很可能会同时依赖一个jar包的不同版本。因此maven在传递依赖机制中加入了一些机制来管理终加入到工程中的依赖项
• 依赖仲裁(Dependency mediation)
• 依赖范围(Dependency scope)
• 依赖管理(Dependency management)
• 排除依赖(Excluded dependencies)
• 选择性依赖(Optional dependencies)
依赖仲裁
当在依赖树中出现同一个依赖的多个版本时,依赖仲裁 用来决定终采用哪个版本。
maven采用选择 近 的机制来决定终的版本号, 近 指的是在工程的依赖树中距离当前的工程路径短,这就是为什么我们可以通过在当前工程中声明一个特定依赖,从而复盖传递过来的依赖的原因。如果两个依赖在依赖树中的距离一样,则选择 先 声明的。
1. 场景1 工程A有如下依赖树
2. A
3. ├── B
4. │ └── C
5. │ └── D 2.0
6. └── E
7. └── D 1.0
8.
此时对于D的依赖,有两条路径 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,因为第二条的路径短,所以终选择 D 1.0
9. 场景2 工程A有如下依赖树
10. A
11. ├── B
12. │ └── C
13. │ └── D 2.0
14. └── E
15. └—— F
16. └—— D 3.0
17.
此时对于D的依赖有两条 A -> B -> C -> D 2.0 和 A -> E -> F -> D 3.0,此时两条路径一样长,选择先声明的,所以终选择D 2.0
• 根据 依赖仲裁 的机制,当我们在自己的工程中明确写明一个依赖的版本时,就可以确保这就是终采用的版本。但是有一个例外就是 硬性需求(Hard requirements)优先级总是高于 软需求(Soft requirement) 。