1.dependency简介
dependency
元素用于定义对其他项目的依赖关系,其中,常见的子元素有:groupId
, artifactId
, version
, type
, scope
, systemPath
, optional
, classifier
, exclusions
等。其中,绝大部分元素,我们前面都有介绍过,这里就不一一赘述了。我们这里简要介绍一下 version
元素的多种表示方式。
version
有如下表示方式
- 1.0 : 非硬性要求,只是一个建议
- [1.0] : 硬性要求,版本必须为1.0
- (,1.0] : x <= 1.0
- [1.2,1.3] : 1.2 <= x <= 1.3
- [1.0,2.0) :1.0 <= x < 2.0
- [1.5,) :x >= 1.5
- (,1.0],[1.2,) : x <= 1.0 or x >= 1.2,多个集合以逗号分隔
- (,1.1),(1.1,) : 排除1.1版本号的其他版本
2.dependencies和dependencyManagement的区别概述
在 pom.xml
文件中,我们可以看到,dependencies
是 dependency
的父元素,而 dependencyManagement
又是 dependencies
的父元素,而 dependencies
元素的使用情况又分为两种,一种,dependencies
元素外没有 dependencyManagement
父元素,另一种,dependencies
元素外还存在 dependencyManagement
父元素。当然,两种使用情况可以在同一 pom.xml
文件中共存,因为二者的作用不同。
我们知道 dependency
元素是用来定义本项目对其他项目的依赖关系的。那么, dependencies
和 dependencyManagement
中 dependency
的作用又有什么不同呢?从宏观上讲,dependencies
中的 dependency
元素下声明的依赖会被引入当前项目,而且在子项目中即使不写该依赖项,依旧会从父项目中继承该依赖项(全部继承),而 dependencyManagement
中的 dependencies
中的 dependency
元素下声明的依赖不会被引入当前项目,它仅仅是一个声明,如果在子项目中不写该依赖项,则不会从父项目中继承该依赖项,如果子项目真的需要引入该依赖,则在声明的时候,可以不用指定具体版本号,会自动继承父项目 dependencyManagement
中声明的版本号,从而实现了对依赖版本的统一管理。当然,如果子项目需要使用不同于父项目中声明的版本号,则需要在声明时指定版本号。
3.dependencyManagement小结
通过 dependencyManagement
元素,可以将项目的依赖关系细节收归一处,方便管理和升级。然而,我们在享受 dependencyManagement
元素带来的巨大便利的同时,需要特别注意的是,通过依赖传递而被引入的项目依赖的版本(version)和有效范围(scope)都会受到 dependencyManagement
元素中对应依赖的控制(如果存在对应依赖的话)。例如:项目A需要依赖项目B和项目C,项目A的 dependencyManagement
元素中声明了项目B的版本为1.0,如果此时项目C也依赖项目B,而且只有项目B的版本大于等于2.0,项目C才能运行。这时候,项目A中引入对项目B的依赖,其版本按照 dependencyManagement
中的声明为1.0版本,这时候就会导致项目不能正常运行。这一点,需要特别注意。