引语:
- 平时
Java
项目中我们经常使用Maven
,再多模块的项目中会经常见到父项目和子项目中的dependencyManagement
,dependencies
,今天我们就来介绍一下它们的区别。
dependencies,
dependency,
dependencyManagement这三个
Maven的
pom`文件标签都是用来进行包管理的。
势力范围由dependencyManagement
>dependencies
>dependency
依次减弱,并且每个标签都是上一个标签的下级。
dependencyManagement
和dependencies
区别:
- 1️⃣
dependencies
:自动引入声明在dependencies
里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies
里的依赖项。 - 2️⃣
dependencyManagement
里只是声明依赖(可以理解为只在父项目,外层来声明项目中要引入哪些jar包),因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version
和scope
都读取自父pom
;如果子项目中指定了版本号,那么会使用子项目中指定的jar
版本。同时dependencyManagement
让子项目引用依赖,而不用显示的列出版本号。Maven
会沿着父子层次向上走,直到找到一个拥有dependencyManagement
元素的项目,然后它就会使用在这个dependencyManagement
元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。 - 3️⃣
dependencyManagement
中的 dependencies
并不影响项目的依赖项;而独立dependencies
元素则影响项目的依赖项。只有当外层的dependencies
元素中没有指明版本信息时,dependencyManagement
中的 dependencies
元素才起作用。一个是项目依赖,一个是maven
项目多模块情况时作依赖管理控制的。