maven提供了dependencyManagement来管理父子模块的dependency依赖包。
当一个父模块下有多个子模块的时候,各个子模块中有不同的依赖包,但是通常某些子模块间会引入相同的模块包,这个时候就出现了重复导入依赖的问题。
那么解决重复依赖的很好的解决方案就是把子模块里相同的依赖提取出来,放到父模块的pom.xml里,然后在子模块里通过继承父模块的pom.xml得到依赖。
但是这个也有个问题,就是如果有5个子模块,4个子模块用到了1个相同的依赖,还有1个没用到怎么办?这个没用到的也根据继承得到了这个依赖,很显然这不是我们所希望的。
所以这个时候就由dependencyManagement出马了。
dependencyManagement用于父模块中,其中可以配置多个依赖包,如下所示:
<properties>
<xxx.version>3.1.1<xxx.version/>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>xxxxx</artifactId>
<version>${xxx.version}</version>
</dependency>
</dependencies>
......
</dependencyManagement>
其中可以把version提取出来,单独放到properties中配置,提高了灵活性。
然后在子模块中,通过在dependencies中正常的导入依赖,但是不声明version,如下所示:
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>xxxxx</artifactId>
</dependency>
</dependencies>
这样就能通过继承的方式,把这个依赖和version继承下来。只有在子模块中引入的dependency才会导入子模块。虽然看起来没啥区别,但却有效的解决了问题,提高了灵活性。