dependencyManagement(以下简称:《依赖管理器》)

《依赖管理器》简介

Maven中的《依赖管理器》元素提供了一种管理依赖版本号的方式。在《依赖管理器》元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有《依赖管理器》元素的项目,然后使用它指定的版本号。

注意:
《依赖管理器》中的依赖必须明确的指定依赖版本号,不然子模块引入该依赖后,将继承父模块《依赖管理器》中的设置,如果父模块的《依赖管理器》中没有设置依赖的版本号, 会导致子模块无法下载该依赖。

《依赖管理器》作用就是用来统一管理依赖版本号的,所以在父模块中可以添加所有子模块需要用到的依赖,然后统一指定版本号。子模块引入依赖时会继承父模块《依赖管理器》中设置的版本号设置。注:《依赖管理器》不会下载它里面配置的依赖。

例外:
上面提到的把所有子模块需要用到的依赖都添加到父模块的《依赖管理器》中,但是在SpringBoot工程中要看情况而定,有些由SpringBoot《依赖管理器》管理的依赖就不用添加到父模块的《依赖管理器》中。

  1. 在子模块中使用到的依赖如果存在SpringBoot《依赖管理器》中,该依赖会直接继承SpringBoot《依赖管理器》中的依赖版本号设置(其实也是从父模块继承而来,父模块从SpringBoot《依赖管理器》中继承)。

  2. 如果父模块的《依赖管理器》定义了SpringBoot《依赖管理器》中存在的依赖就会发生覆盖,此时子模块也是继承父模块《依赖管理器》中的依赖设置了。

  3. 结合上面两条,父模块没必要去管理SpringBoot《依赖管理器》已经定义的依赖,因为这样做是自找苦吃,除非想改变SpringBoot《依赖管理器》依赖的版本号时才去设置。

总结:Maven的继承关系跟Java一致。

下面展示了在父模块中的《依赖管理器》不定义依赖版本号带来的问题,以及依赖的继承性质,还有通过图片的方式展示了在SpringBoot工程中为什么父模块的《依赖管理器》不要去管理SpringBoot《依赖管理器》中存在的依赖。
在这里插入图片描述

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐