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责任链模式详解

    Java责任链模式详解

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它用于将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求,本文将详细介绍 Java 中的责任链模式,包括其概念、结构、实现方式以及应用案例等,需要的朋友可以参考下
    2023-05-05
  • SpringBoot使用@Async注解实现异步调用

    SpringBoot使用@Async注解实现异步调用

    这篇文章主要介绍了SpringBoot使用@Async注解实现异步调用,异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待,程序执行完即可执行,可以减少程序执行时间,需要的朋友可以参考下
    2023-10-10
  • 关于Object中equals方法和hashCode方法判断的分析

    关于Object中equals方法和hashCode方法判断的分析

    今天小编就为大家分享一篇关于关于Object中equals方法和hashCode方法判断的分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • @Async异步线程池以及线程的命名方式

    @Async异步线程池以及线程的命名方式

    这篇文章主要介绍了@Async异步线程池以及线程的命名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java接口返回参数按照请求参数进行排序方式

    java接口返回参数按照请求参数进行排序方式

    这篇文章主要介绍了java接口返回参数按照请求参数进行排序方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java判断字符串String是否为空问题浅析

    java判断字符串String是否为空问题浅析

    这篇文章主要介绍了java判断字符串String是否为空问题,有需要的朋友可以参考一下
    2014-01-01
  • MyBatis中resultMap和resultType的区别详解

    MyBatis中resultMap和resultType的区别详解

    这篇文章主要介绍了MyBatis中resultMap和resultType的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring Data中domain模块的使用

    Spring Data中domain模块的使用

    Spring Data是一个流行的数据访问框架,本文主要介绍了Spring Data中domain模块的使用,并展示如何使用它来优化我们的数据访问层,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • openGauss数据库JDBC环境连接配置的详细过程(Eclipse)

    openGauss数据库JDBC环境连接配置的详细过程(Eclipse)

    这篇文章主要介绍了openGauss数据库JDBC环境连接配置(Eclipse),演示基于JDBC开发的主要步骤,会涉及创建数据库、创建表、插入数据等,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java多线程 Producer and Consumer设计模式

    Java多线程 Producer and Consumer设计模式

    这篇文章主要介绍了Java多线程 Producer and Consumer设计模式,producer是生产者的意思:指生产数据的线程,consumer是消费者的意思,指的是使用数据的线程,下文围绕Producer及Consumer展开话题,需要的朋友可以参考一下
    2021-10-10

最新评论