Maven项目分析剔除无用jar引用

1、为何要作这件事?web

项目持续研发,不停地在上面新增功能,新增特性,引入新的框架和组件,jar包依赖多而且复杂,再加上需求各类变动,有很多已经存在的功能下线,但jar包依赖没人管,仍是放在项目的pom.xml文件里。项目持续的时间一长,常常会出现项目打包要求内存多,时间慢的问题,如何分析项目中哪些依赖是有用的,哪些能够剔除的,一方面减轻打包内存占用多,时间慢的问题,另外一方面照顾研发童鞋的强迫症问题(容不得半点无用jar包在个人项目里),这事就能够提上日程了。spring

2、怎么作?apache

若是是Maven项目,执行起来仍是比较简单,Maven本身提供了一个检测工具,输入命令便可。在IDEA中,切换到Terminal窗口,或者用命令行打开相应工程目录,直接输入json

mvn dependency:analyze
复制代码

查看控制台输出的日志,重点关注这两部分:bash

[WARNING] Used undeclared dependencies found:
[WARNING]    com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
[WARNING]    com.fasterxml.jackson.core:jackson-databind:jar:2.9.9:compile
[WARNING]    io.jsonwebtoken:jjwt:jar:0.9.0:compile
[WARNING]    org.apache.rocketmq:rocketmq-common:jar:4.5.2:compile
[WARNING]    org.springframework:spring-beans:jar:5.1.8.RELEASE:compile
[WARNING]    com.google.code.gson:gson:jar:2.8.0:compile
[WARNING]    org.springframework.boot:spring-boot:jar:2.1.6.RELEASE:compile
[WARNING]    com.fasterxml.jackson.core:jackson-core:jar:2.9.9:compile
[WARNING]    org.springframework:spring-core:jar:5.1.8.RELEASE:compile
[WARNING]    org.apache.rocketmq:rocketmq-remoting:jar:4.5.2:compile
[WARNING] Unused declared dependencies found:
[WARNING]    org.projectlombok:lombok:jar:1.16.20:provided
[WARNING]    org.springframework.boot:spring-boot-starter-test:jar:2.1.6.RELEASE:test
复制代码
Used undeclared dependencies found

间接依赖,就是说你在当前项目工程的pom.xml里没有直接声明,这个依赖是由你声明过的dependency里的pom.xml依赖传递得来的。 例如org.apache.rocketmq:rocketmq-common:jar:4.5.2:compile是你引用了这个:架构

<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-client</artifactId>
	<version>4.5.2</version>
</dependency>
复制代码

Maven原本就是这样用的,也不建议说你把这部分引用拷贝到你的pom.xml里,通常来讲这部分的WARNING能够忽略。并发

Unused declared dependencies found

无用依赖,这个指咱们在pom.xml声明了这个jar包的依赖,但在项目工程里没有使用到,这个不是咱们这次关注的重点,肯定不须要,就能够剔除掉这个依赖,Reimport后这个jar包就从咱们项目中剔掉了。框架

3、何时作?maven

1)新项目创建时,引用jar包时要慎重,不要一古脑儿直接拷贝老项目的依赖,避免后期又花时间来剔除。分布式

2)功能代码重构时,能够适当作一次剔除,由于后面还有自测,提交测试环节,若是有误删,测试的时候能发现。

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

1)这个检测的结果仅供参考,有时也不许确,如上文说起的org.projectlombok:lombok:jar:1.16.20:provided,实际上在项目中有使用到它的注解@Data,这个属于误判。要注意剔除依赖后多测试,工具毕竟有毕竟的缺陷性。

2)若是童鞋们接手遗留的老项目时,这种问题确定不少,但刚接手时不建议作这个操做,由于自己对项目不熟悉,上来就删东西致使问题会浪费不少时间和精力搞定依赖的问题,这块东西建议暂时先不要动。

5、补充一个小插件

查看pom.xml的依赖关系时,能够在IDEA上安装maven help插件,能够直观地看到各jar依赖关系

maven help插件示例

专一Java高并发、分布式架构,更多技术干货分享与心得,请关注公众号

在这里插入图片描述
相关文章
相关标签/搜索