Maven插件之Dependency:analyze的使用

 更新时间:2024年10月06日 15:35:06   作者:笔墨桑  
在软件开发中,合理管理项目依赖是保证构建稳定性的关键,Maven作为流行的项目管理工具,提供了Dependency插件来帮助开发者分析和优化项目依赖,通过执行dependency:analyze指令,可以辨识项目中使用的、未声明的、和未使用的依赖项

前言

完成新功能的开发后,在发包前组长告诉我要检查maven工程的依赖,并告诉我相关指令,此文记录一下使用方式

正文

简介

Maven官网之Dependency插件

Dependency插件提供了操纵artifact的能力,可以复制以及拆包本地或远程仓库的artifact到指定地点。

Dependency有很多的goal,这里介绍的是dependency:analyze

用途

用来分析项目的依赖并确定以下内容

  • 使用的并且声明的依赖
  • 使用的但是未声明的依赖
  • 未使用的但是声明的依赖

在文章最后的《分析结果以及改进方案》章节中会介绍具体的含义

使用方法

前提:保证电脑已经下载了Maven,以及已经配置好Maven的环境变量

通过命令行

  1. 打开命令行,进入Maven项目或模块的根目录,即包含pom.xml的目录(如果该目录不包含pom.xml则会报错)
  2. 执行以下指令
mvn dependency:analyze

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

通过idea

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

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

指定项目路径Working directory为想要分析的Maven项目/模块。

在命令行Command line中输入dependency:analyzeIDEA中执行Maven指令并不需要以mvn开头,IDEA会自动添加)

点击IDE右上方的执行rundebug开始执行

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

分析结果以及改进方案

最开始的《用途》章节中曾引出,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中添加的依赖在实际程序中并没有用到

改进方案为移除无用的依赖,但是有一点除外,就是我们声明scopetest的依赖,也就是单元测试中使用到的,这些不能够移除。如

我们只能够将springboot的依赖移除,因为在实际中并没有使用到,但是其余的以:test结尾的依赖是不能移除的,在单元测试中会使用到他们

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现Base64图片转URL的完整方案

    Java实现Base64图片转URL的完整方案

    这篇文章主要介绍了如何使用Java实现Base64格式图片转换为可访问的URL链接的过程,包括数据有效性校验、图片压缩、方向信息校正以及阿里云OSS存储对接,核心实现代码涵盖了从获取Base64图片数据到上传OSS的完整流程,需要的朋友可以参考下
    2025-11-11
  • Java读取DBF文件(GBK编码)的方法

    Java读取DBF文件(GBK编码)的方法

    在Java开发中,有时需要读取DBF(dBase文件)格式的数据文件,而这些文件通常采用GBK(简体中文)编码,本文将介绍如何使用Java读取采用GBK编码的DBF文件,需要的朋友可以参考下
    2024-11-11
  • spring aop pointcut 添加多个execution方式

    spring aop pointcut 添加多个execution方式

    这篇文章主要介绍了spring aop pointcut 添加多个execution方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot整合Ip2region获取IP地址和定位的详细过程

    SpringBoot整合Ip2region获取IP地址和定位的详细过程

    ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现 ,这篇文章主要介绍了SpringBoot整合Ip2region获取IP地址和定位,需要的朋友可以参考下
    2023-06-06
  • java代码如何实现存取数据库的blob字段

    java代码如何实现存取数据库的blob字段

    这篇文章主要介绍了java代码如何实现存取数据库的blob字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Java编程synchronized与lock的区别【推荐】

    Java编程synchronized与lock的区别【推荐】

    互联网信息泛滥环境下少有的良心之作!如果您想对Java编程synchronized与lock的区别有所了解,这篇文章绝对值得!分享给大家,供需要的朋友参考。不说了,我先学习去了。
    2017-10-10
  • SpringBoot学习篇之@Valid与@Validated的区别

    SpringBoot学习篇之@Valid与@Validated的区别

    @Valid是使用Hibernate validation的时候使用,@Validated是只用Spring Validator校验机制使用,下面这篇文章主要给大家介绍了关于SpringBoot学习篇之@Valid与@Validated区别的相关资料,需要的朋友可以参考下
    2022-11-11
  • java实现文件加密解密多种方法

    java实现文件加密解密多种方法

    这篇文章主要给大家介绍了关于java实现文件加密解密多种方法的相关资料, Java支持多种加密解密算法,常用的有DES、AES、RSA等,需要的朋友可以参考下
    2023-07-07
  • Java异常处理之try...catch...finally详解

    Java异常处理之try...catch...finally详解

    今天小编就为大家分享一篇关于Java异常处理之try...catch...finally详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Java中s.charAt(index)用于提取字符串s中的特定字符操作

    Java中s.charAt(index)用于提取字符串s中的特定字符操作

    这篇文章主要介绍了Java中s.charAt(index)用于提取字符串s中的特定字符操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论