dependencyManagement标签
目的:统一依赖版本、分门别类管理依赖(通过下述的scope属性)
使用:
- 只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。
- 如果不在子项目中声明依赖,是不会从父项目中继承下来的,不过这段配置是会被继承
- 只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom
- 子项目会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
- 另外如果子项目中指定了版本号,那么会使用子项目中指定的jar包版本。
```java
module1
支持scope属性为import:支持<a name="gb882"></a>## dependencies标签目的:消除重复依赖<br />使用:即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。<br />是否支持scope属性为import:不支持<a name="cA57S"></a>##<a name="hggHH"></a>## scope属性scope元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。具体取值参考[Maven依赖中scope的含义](https://www.jianshu.com/p/7145f01ac3ad),此处只讲取值为import时的作用。- 出现的背景(针对import取值):- Maven的继承和Java的继承一样,是无法实现多重继承的,即:一个子项目只能有一个父项目。- 如果10个、20个甚至更多模块继承自同一个模块,假如将子模块需要的依赖加入父项目中,然后让子项目去显示声明继承父项目中的依赖,那么这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以便于清晰的管理,那就不可能了,然而import scope依赖能解决这个问题。- 解决办法:- 首先为每一个子项目独立建立一个pom文件,其中用dependencyManagement专门用来管理该子项目的依赖。例如可以写这样一个用于依赖管理的pom:```java<project><modelVersion>4.0.0</modelVersion><groupId>com.test.sample</groupId><artifactId>base-parent1</artifactId><packaging>pom</packaging><version>1.0.0-SNAPSHOT</version><dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactid>junit</artifactId><version>4.8.2</version></dependency><dependency><groupId>log4j</groupId><artifactid>log4j</artifactId><version>1.2.16</version></dependency></dependencies></dependencyManagement></project>
- 然后在父项目中通过import(非继承方式)引入各个子项目的pom文件,这样,父模块的pom就会非常干净,由专门的packaging为pom来管理依赖,也契合的面向对象设计中的单一职责原则。
<dependencyManagement><dependencies><dependency><groupId>com.test.sample</groupId><artifactid>base-parent1</artifactId><version>1.0.0-SNAPSHOT</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
- 需要注意的点:import scope只能用在dependencyManagement里面。
