前言
完成新功能的开发后,在发包前组长告诉我要检查maven工程的依赖,并告诉我相关指令,此文记录一下使用方式
正文
简介
Dependency插件提供了操纵artifact的能力,可以复制以及拆包本地或远程仓库的artifact到指定地点。
Dependency有很多的goal,这里介绍的是dependency:analyze
用途
用来分析项目的依赖并确定以下内容
- 使用的并且声明的依赖
- 使用的但是未声明的依赖
- 未使用的但是声明的依赖
在文章最后的《分析结果以及改进方案》章节中会介绍具体的含义
使用方法
前提:保证电脑已经下载了Maven,以及已经配置好Maven的环境变量
通过命令行
- 打开命令行,进入Maven项目或模块的根目录,即包含
pom.xml的目录(如果该目录不包含pom.xml则会报错) - 执行以下指令
mvn dependency:analyze
等待执行完毕后,会看到类似如下输出

通过idea
- 点击
idea右上方Add Configuration...按钮(不同版本之间可能有差异)

- 在弹出窗口中点击左上角
+,选择Maven

- 指定项目路径
Working directory为想要分析的Maven项目/模块。在命令行Command line中输入dependency:analyze(IDEA中执行Maven指令并不需要以mvn开头,IDEA会自动添加)

- 点击IDE右上方的执行
run或debug开始执行

等待执行完毕后,会看到类似如下输出

分析结果以及改进方案
最开始的《用途》章节中曾引出,depencency:analyze插件会分析如下内容
- 使用的并且声明的依赖
- 使用的但是未声明的依赖
- 未使用的但是声明的依赖
我们需要根据分析结果进行改进优化:
使用的并且声明的依赖
该情况属于正常现象,在分析结果中也不会有任何体现。
使用的但是未声明的依赖
表示依赖的a.jar又引用了其他的b.jar,导致我们间接的依赖了b.jar,但是我们并没有在pom.xml中显示的进行依赖。这种情况是不推荐的,原因是我们可能在项目中了b.jar的方法,万一哪天对a.jar进行升级,而升级后的a.jar不依赖了b.jar,那么我们的程序就会报错。
改进办法就是显示的依赖b.jar,如前面的例子中出现的

改进方案为在pom.xml中添加对spring-jdbc以及spring-tx的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
未使用的但是声明的依赖
表示在pom.xml中添加的依赖在实际程序中并没有用到
改进方案为移除无用的依赖,但是有一点除外,就是我们声明scope为test的依赖,也就是单元测试中使用到的,这些不能够移除。如

我们只能够将springboot的依赖移除,因为在实际中并没有使用到,但是其余的以:test结尾的依赖是不能移除的,在单元测试中会使用到他们
本文介绍如何使用Maven的Dependency插件分析项目的依赖关系,并提供具体的改进方案。
1244

被折叠的 条评论
为什么被折叠?



