Maven dependencyManagement 详解
dependencyManagement说明 (以下简称:《依赖管理器》)注意:《依赖管理器》中的依赖必须明确的指定依赖版本号,不然子模块引入该依赖后,将继承父模块《依赖管理器》中的设置,如果父模块的《依赖管理器》中没有设置依赖的版本号, 会导致子模块无法下载该依赖。《依赖管理器》作用就是用来统一管理依赖版本号的,所以在父模块中可以添加所有子模块需要用到的依赖,然后统一指定版本号。子模块引入依赖时
dependencyManagement(以下简称:《依赖管理器》)
《依赖管理器》简介
Maven中的《依赖管理器》元素提供了一种管理依赖版本号的方式。在《依赖管理器》元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有《依赖管理器》元素的项目,然后使用它指定的版本号。
注意:
《依赖管理器》中的依赖必须明确的指定依赖版本号,不然子模块引入该依赖后,将继承父模块《依赖管理器》中的设置,如果父模块的《依赖管理器》中没有设置依赖的版本号, 会导致子模块无法下载该依赖。
《依赖管理器》作用就是用来统一管理依赖版本号的,所以在父模块中可以添加所有子模块需要用到的依赖,然后统一指定版本号。子模块引入依赖时会继承父模块《依赖管理器》中设置的版本号设置。注:《依赖管理器》不会下载它里面配置的依赖。
例外:
上面提到的把所有子模块需要用到的依赖都添加到父模块的《依赖管理器》中,但是在SpringBoot工程中要看情况而定,有些由SpringBoot《依赖管理器》管理的依赖就不用添加到父模块的《依赖管理器》中。
-
在子模块中使用到的依赖如果存在SpringBoot《依赖管理器》中,该依赖会直接继承SpringBoot《依赖管理器》中的依赖版本号设置(其实也是从父模块继承而来,父模块从SpringBoot《依赖管理器》中继承)。
-
如果父模块的《依赖管理器》定义了SpringBoot《依赖管理器》中存在的依赖就会发生覆盖,此时子模块也是继承父模块《依赖管理器》中的依赖设置了。
-
结合上面两条,父模块没必要去管理SpringBoot《依赖管理器》已经定义的依赖,因为这样做是自找苦吃,除非想改变SpringBoot《依赖管理器》依赖的版本号时才去设置。
总结:Maven的继承关系跟Java一致。
下面展示了在父模块中的《依赖管理器》不定义依赖版本号带来的问题,以及依赖的继承性质,还有通过图片的方式展示了在SpringBoot工程中为什么父模块的《依赖管理器》不要去管理SpringBoot《依赖管理器》中存在的依赖。
更多推荐
所有评论(0)