Maven中的dependencyManagement和dependencies

最近公司的数据中心项目是使用Maven进行管理,在开发的过程中遇到了dependencyManagement和dependencies,不知道大家对这两个元素有什么想法?

Maven使用dependencyManagement元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement 元素中指定的版本号。

dependencyManagement

例如,在父模块中的pom:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependencyManagement>

<dependencies>
<dependency>
<groupId>com.dm</groupId>
<artifactId>mt-model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dm</groupId>
<artifactId>mt-tool</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependencies>

</dependencyManagement>

然后我们在子模块里就可以这样引用mt-model和mt-tool:

1
2
3
4
5
6
7
8
9
10
<dependencies>
<dependency>
<groupId>com.dm</groupId>
<artifactId>mt-model</artifactId>
</dependency>
<dependency>
<groupId>com.dm</groupId>
<artifactId>mt-tool</artifactId>
</dependency>
</dependencies>

发现两者有什么区别了么?其实就是在子模块中引用pom没有添加版本号。

这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。

dependencies

相对于dependencyManagement,所有声明在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。

  • 作者: Sam
  • 发布时间: 2018-07-28 22:19:50
  • 最后更新: 2019-12-09 23:03:26
  • 文章链接: https://ydstudios.gitee.io/post/c65e0153.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!