打印MAVEN依赖树能解决什么问题?
查看maven依赖的方式有很多种,比如通过pom.xml一层层查看,通过lib文件夹查看等,但我觉得如果是一个大型项目,涉及模块很多,依赖引用就会变的非常复杂,此时通过这种查看方式效率就会很低,还有个主要问题就是同一个jar包可能通过多个jar间接依赖进来,那确定到底是通过哪个jar依赖进来的就显得很重要,不然改半天发现不生效,还会导致别的问题,所以查看项目依赖树就很准确和直观,能够进行快速定位,并确认修改后是否生效。
怎么打印MAVEN依赖树?
通过mvn dependency:tree命令来打印依赖树
执行命令方式如下:
- 通过pom.xml右键打开Open In Terminal:
- 直接左下角termina打开
打开后在项目跟目录下执行maven打印依赖树命令:mvn dependency:tree >> D:/tree.txt
这里可以输出到一个文档中,也可以不输出直接打印到控制台
Tip:命令行方式执行一定要先添加MAVEN环境变量
添加MAVEN_HOME:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.2\plugins\maven\lib\maven3
追加Path:%MAVEN_HOME%\bin
添加后重启电脑,在命令行中执行mvn -v查看是否添加成功。
- 通过Maven工具栏窗口Run Anything 窗口执行
输入mvn dependency:tree执行
打印后的依赖树是啥样的?
如下就是打印出来后的依赖树样式,其中主要有三个符号:
“|” 表示一个层级
“+-” 同一层级下,表示该包后面还有其他依赖包
“\-” 同一层级下,表示该包后面不再其他依赖包。即同一层依赖的最后一个节点。
假如我们需要寻找spring-aop这个jar包到底是通过哪个jar包间接引用进来的,如是我们搜索就能发现依赖关系如下:
那么如果我们此时不想使用spring-aop:jar的5.0.6这个版本,想使用其他的版本,那么我们就可以通过在pom.xml中找到这个spring-webmvc,剔除spring-aop这个依赖,再引用我们自己需要的依赖即可
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.6.RELEASE</version> <!-- 剔除不需要的jar --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </exclusion> </exclusions> </dependency> <!-- 重新添加需要的jar --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.0.14.RELEASE</version> </dependency>
修改完成后,我们重新更新下依赖,再次打印依赖树查看依赖情况发现aop包已经换成了我们需要的版本对应的jar包了。
补充:
也可以查看指定jar包的依赖树
查看依赖树中包含某个groupId和artifactId的依赖链mvn dependency:tree -Dincludes=com.alibaba:fastjson
: