Maven插件之Dependency:analyze的使用
前言
完成新功能的开发后,在发包前组长告诉我要检查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结尾的依赖是不能移除的,在单元测试中会使用到他们
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
- idea中maven使用tomcat7插件运行run报错Could not start Tomcat问题
- 如何使用maven-helper插件解决jar包冲突问题
- SpringBoot Maven打包插件spring-boot-maven-plugin无法解析原因
- SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代码
- maven插件maven-assembly-plugin打包归纳文件zip/tar使用
- maven插件maven-jar-plugin构建jar文件的详细使用
- Spring Boot的Maven插件Spring Boot Maven plugin详解
相关文章
spring aop pointcut 添加多个execution方式
这篇文章主要介绍了spring aop pointcut 添加多个execution方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
SpringBoot整合Ip2region获取IP地址和定位的详细过程
ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现 ,这篇文章主要介绍了SpringBoot整合Ip2region获取IP地址和定位,需要的朋友可以参考下2023-06-06
Java编程synchronized与lock的区别【推荐】
互联网信息泛滥环境下少有的良心之作!如果您想对Java编程synchronized与lock的区别有所了解,这篇文章绝对值得!分享给大家,供需要的朋友参考。不说了,我先学习去了。2017-10-10
SpringBoot学习篇之@Valid与@Validated的区别
@Valid是使用Hibernate validation的时候使用,@Validated是只用Spring Validator校验机制使用,下面这篇文章主要给大家介绍了关于SpringBoot学习篇之@Valid与@Validated区别的相关资料,需要的朋友可以参考下2022-11-11
Java异常处理之try...catch...finally详解
今天小编就为大家分享一篇关于Java异常处理之try...catch...finally详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-01-01
Java中s.charAt(index)用于提取字符串s中的特定字符操作
这篇文章主要介绍了Java中s.charAt(index)用于提取字符串s中的特定字符操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-10-10


最新评论