区分Maven中dependencyManagement与dependencies的作用

      使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom.xml。而maven中有许多的标签,下面我们主要讨论parent、dependencies与dependencyManagement标签它们的用处以及区别。

一、Parent标签的应用场景

在实际开发中我们为了更好地进行开发和管理我们常会进行模块化开发。现在有这样一个场景,sac-def项目中有两个模块sac-def-service、sac-def-common,它们都需要引用同一个guava.jar。如果在它们的pom文件中都引入guava.jar依赖,当guava.jar的版本发生变化时,两个模块的pom文件都需要修改,比较麻烦。

解决方案:可以通过<parent>来实现。如下图所示,sac-def是父项目,不存放任何代码,其作用是管理多个模块之间公共的依赖。

在sac-def的pom文件中定义对guava.jar的依赖

//sac-def的pom.xml
<dependencies>
 <dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <version>${guava.version}</version>
 </dependency>
<dependencies>

子模块中只需要使用parent标签中写上parent项目的pom坐标就可以引用到guava.jar了。

//子模块pom.xml
<parent>
 <!-- 继承Parent-->
</parent>

二、dependencyManagement标签的应用场景:

当guava.jar只有sac-def-service和sac-def-common这两个子模块需要,sac-def-dul子模块不需要,那该如何依赖?如果直接在sac-def-service和sac-def-common中分别定义对guava.jar的依赖,要维持它们引用guava.jar版本一致也比较麻烦。

解决方式:首先通过在parent项目的pom文件中使用<dependencyManagement></dependencyManagement>将guava.jar管理起来。

//父模块 pom.xml
<dependencyManagement>
<dependencies>
 <dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <version>${guava.version}</version>
 </dependency>
<dependencies>
</dependencyManagement>

如果有哪个子模块要用,那么子模块便在其pom文件中使用标签中写上guava.jar的坐标,不需要写版本号就可以依赖到这个jar包了。这样当guava.jar版本需要发生变化时,只要修改parent项目中的版本就可以实现子项目的对于guava.jar引用版本保持一致

//子模块pom.xml
<parent>
 <!-- 继承Parent项目-->
</parent>
<dependencies>
 <dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <!-- 不需要填写版本号-->
 </dependency>
<dependencies>

                                 

三、总结

  • dependencyManagement里只是声明依赖,并不实现引入。子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的。如果子模块中写了该依赖项,并且没有指定具体版本则会从父项目中继承该项,并且version和scope都读取自父pom。如果子模块需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子模块就会使用子模块声明的版本号,不继承于父项目版本号。

  • dependencies的作用是引入依赖,如果继承了父项目,即使在子模块中不写该依赖项,子模块仍然会全部继承父项目

四、问题

那么问题来了,如果父pom中已经使用了dependencyManagement,那么怎样才能在子项目中不重复都声明一遍呢 ?评论区留下你的答案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

退役人员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值