今天我们分享的内容是Maven中的传递性依赖。在介绍这个内容之前,在使用Maven时会不会有这样疑惑。也就是当我们引入一个组件时,需要在pom.xml中配置相关依赖的标签。但这个组件可能还会依赖其它的组件。如果我们每引入一个依赖时,都需要将这个依赖所依赖的组件配置写到pom.xml中这样会导致,我们需要配置的依赖的标签就会非常的多,并且我们也很难知道一个组件和依赖的其它的组件到底是什么。且这样也违背了Maven通过坐标引入组件的目的了。因为它不够简单与便捷。为了解决上述的问题,Maven引入了传递性依赖。所谓的传递性依赖的,指的就是当我们引入一个组件时,如果这个组件还依赖其它的组件,那么Maven就会自动将其它的组件也一同下载下来,并且并不需要我们引入这些额外的依赖。
下面我们通过代码验证一下,还是我们之前的代码事例,也就是引入fastjson
依赖包,来验证一下上面所说。具体配置如下:
- pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.26</version>
</dependency>
我们创建一个新的项目,并在项目中添加上面的依赖。
我们展开External Libraries
目录,就可以现在项目中引入的所有外部的依赖包。
我们看上图所示,项目引入了3个依赖包,但我们依赖的配置只配置了一个依赖,这就是Maven传递性依赖的作用,如果没有传递性依赖,则上面只有显示一个依赖包,并且需要我们手动的将其它的依赖包配置到项目中,才可以使用。
除了通过上面的方式查看项目的依赖外,IDEA中还提供了以下的方式查看依赖,并且这种方式更直观。
首先,我们选中项目中的pom.xml。然后右键选择Maven
然后选择Show Diagram ...
当我们点击后就会看到下图所示:
它显示了我们项目所有的依赖包,并且会按照我们传递性依赖的顺序显示。按照上图显示,我们知道,虽然,我们只引入了fastjson
依赖,但是因为它依赖了fastjson-extension
。所以Maven会继续引入这个依赖包。又因为fastjson-extension
依赖了fastjson2
,所以Maven又会引入这个依赖。这也就是传递性依赖引入依赖包的顺序。
除此之外,Maven也提供了相应的命令来查看我们项目中的依赖。具体命令如下:
- mvn dependency:list
使用上述命令可以列出我们项目所有的依赖包。
- mvn dependency:tree
此命令和上面的命令一样,也可以列出我们项目所有的依赖包,不同之处就是这个命令可以按照树的方式展示,方便我们查看依赖关系。而上面的命令是同一级显示的。
- mvn dependency:analyze
使用此命令Maven可以分析当前项目的依赖。
由于后续的内容中有专门的章节详细介绍上面的命令,所以这里就不做过多的介绍了。上面的内容就是Maven中传递性依赖的相关内容,它也是Maven可以非常方便我们管理依赖包的因素之一。