写点什么

简化 Maven 项目依赖:优雅去除未使用 Jar 包

作者:采菊东篱下
  • 2025-01-17
    湖南
  • 本文字数:2152 字

    阅读完需:约 7 分钟

一、为什么要做这件事?

自从我踏入职场,便历经了技术革新的数次浪潮。从最初的.Net FrameworkWinformWPF,到Asp.Net MVCAsp.Net MVC WebApi,再到Asp.Net Core 2.x的广泛应用,我始终深耕于.net 领域。

然而,随着技术的不断演进,我逐渐发现.net 相关的工作机会变得稀少。在出租屋内,我自学了一个月的前端技术,竟意外地获得了进入某知名企业的机会,从而开启了全新的前端探索之旅。如今,我又迈入了运维的新领域。回顾过往,每一步都充满了挑战与不易。

在日常工作中,项目经常会因为客户方的漏洞扫描而暴露出一些 jar 包的漏洞问题,需要进行紧急修复或升级。

二、怎么做?

对于 Maven 项目,处理起来相对简单。Maven 自身提供了一款强大的依赖分析工具,只需简单的命令输入即可轻松实现。在 IntelliJ IDEA 中,你可以切换到 Terminal 窗口,或者在命令行中导航至项目根目录,执行以下命令:

mvn dependency:analyze
复制代码

随后,仔细查看控制台输出的日志信息,特别关注以下几个部分:

[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ xxxproject ---[WARNING] Used undeclared dependencies found:[WARNING]    org.springframework:spring-beans:jar:4.0.0.RELEASE:compile[WARNING]    org.springframework:spring-context:jar:4.0.0.RELEASE:compile[WARNING] Unused declared dependencies found:[WARNING]    com.alibaba:dubbo:jar:2.5.3:compile[WARNING]    com.baidu.disconf:disconf-client:jar:2.6.32:compile[WARNING]    org.mybatis:mybatis:jar:3.2.7:compile[WARNING]    org.mybatis:mybatis-spring:jar:1.2.2:compile[WARNING]    mysql:mysql-connector-java:jar:5.1.41:compile[WARNING]    com.alibaba:druid:jar:1.0.9:compile[WARNING]    com.github.sgroschupf:zkclient:jar:0.1:compile[WARNING]    org.apache.zookeeper:zookeeper:jar:3.4.6:compile[WARNING]    org.springframework:spring-jdbc:jar:4.0.0.RELEASE:compile[WARNING]    org.slf4j:log4j-over-slf4j:jar:1.7.5:compile[WARNING]    org.slf4j:jcl-over-slf4j:jar:1.7.5:runtime[WARNING]    ch.qos.logback:logback-classic:jar:1.0.13:compile   
复制代码

接下来,我们将详细解读日志中 Used undeclared dependencies foundUnused declared dependencies found

Used undeclared dependencies found

这一部分指的是项目中实际使用了某个依赖包,但并未在 pom.xml 文件中显式声明。这些依赖包可能是通过其他依赖间接引入的。

例如,假设你的项目在pom.xml中声明了对A.jar的依赖,但未声明对B.jar的依赖。而A.jar的依赖树中又包含了对 B.jar 的依赖。通过运行mvn dependency:analyze命令,如果输出如下警告:

mvn dependency:analyze
复制代码

出现

[WARNING] Used undeclared dependencies found: B.jar
复制代码

这意味着你的项目代码中实际上使用了B.jar中的类或接口。在这种情况下,你应该将B.jar添加到项目的pom.xml文件中,以确保依赖关系的正确声明。插播一条:如果你想加入我们,可以点击->程序员交流社区

Unused declared dependencies found

这一部分则是指你在项目的pom.xml文件中声明了某个依赖包,但在实际的项目代码中并未使用到它。这些依赖包可能是不必要的,可以考虑从pom.xml中移除。

然而,在删除这些依赖之前,请务必注意以下几点:

  • “未使用”的定义仅限于main/java和 test 源代码目录,不包括配置文件或其他可能的扩展点。

  • 在删除依赖之前,务必备份pom.xml文件,以防万一误删重要依赖导致的问题。

  • Maven 的依赖分析工具并非万能,有时可能会产生误报。因此,在删除任何依赖后,都应进行充分的测试以验证项目的稳定性。

三、什么时候做?

  • 新项目初始化时: 在创建新项目并添加依赖时,务必谨慎选择所需的 jar 包,避免盲目复制旧项目的依赖配置,从而减少后续不必要的清理工作。

  • 功能代码重构时: 在进行功能代码的重构过程中,可以顺便进行一次依赖项的审查与清理。由于后续还有自测和提测等环节,即使有误删的情况也能及时发现并修复。

四、有什么风险要注意的?

结果仅供参考: 依赖分析工具的结果并非绝对准确,可能存在误判的情况。例如,某些工具可能无法识别某些特殊的使用场景(如注解处理器等)。因此,在删除依赖后,请务必进行全面的测试以验证项目的正确性。

老项目接手时的注意事项: 当接手一个遗留的老项目时,可能会发现大量的依赖问题。然而,在初次接手时并不建议立即进行此类操作。由于对项目的不熟悉,贸然删除依赖可能会引发一系列难以定位的问题,从而浪费大量的时间和精力。建议在充分了解项目结构和业务逻辑后再进行此类优化工作。

五、补充一个快捷方法

使用 IntelliJ IDEA 自带的 maven 工具

使用方法

  • 打开 IntelliJ IDEA,导航至项目的 pom.xml 文件所在目录。

  • 右键点击 pom.xml 文件,选择“Maven”菜单中的“Analyze Dependencies”选项。

  • IntelliJ IDEA 将自动分析项目的依赖关系,并在弹出的窗口中展示分析结果。你可以根据分析结果进行相应的操作,如添加缺失的依赖或删除未使用的依赖等。

通过以上步骤,你可以在 IntelliJ IDEA 中轻松管理项目的依赖关系,确保项目的稳定性和可维护性。

来源:juejin.cn/post/7384636970033905714

用户头像

还未添加个人签名 2023-02-14 加入

还未添加个人简介

评论

发布
暂无评论
简化Maven项目依赖:优雅去除未使用Jar包_编程_采菊东篱下_InfoQ写作社区