是否可以自动优化 maven 依赖项?

2022-09-03 07:36:55

我正在处理一个大项目,该项目由大约40个子项目组成,这些项目具有非常未优化的依赖项。有些声明的依赖项未在使用中,也有未使用但未声明的依赖项。第二种情况是可能通过其他依赖关系添加依赖关系。

我想删除冗余并添加所需的依赖项。我跑了,得到了一长串警告,我现在必须修复。mvn dependency:analyze

我想知道是否有maven插件或任何其他实用程序可以自动更新我的文件。我试图手动完成,但这需要花费很多时间。似乎需要几天的复制/粘贴才能完成任务。pom.xml

在更糟糕的情况下,我可以自己编写这样的脚本,但可能存在现成的东西?

以下是报告依赖关系警告的方法:mvn dependency:analyze

[WARNING] Used undeclared dependencies found:
[WARNING]    org.apache.httpcomponents:httpcore:jar:4.1:compile
[WARNING] Unused declared dependencies found:
[WARNING]    commons-lang:commons-lang:jar:2.4:compile
[WARNING]    org.json:json:jar:20090211:compile

答案 1

我不会说:非常没有优化的依赖关系,这只是有人没有做好他的工作,因为定义未使用的依赖关系表明有人不了解构建工具是什么以及它是如何工作的。这可以与包含许多未使用的导入的Java文件进行比较。在Java源代码中未使用的导入的情况下,这可以简单地由IDE处理,但是对于Maven中的依赖项,不存在如此简单的方法,因为已经表达了问题,问题是各种DI等,这使得这项工作变得困难。您可以尝试将依赖项:分析的结果输出到脚本中(存在用于该目标的选项),然后在清理依赖项后测试生成的生成。

运行可能是一个好主意

mvn dependency:analyze -DscriptableOutput=true 

它产生的输出可以非常简单地从输出中提取,并可用于进一步处理,例如用作版本maven插件的输入(具有一些预转换)。


答案 2

我不建议自动清理依赖项。

  1. 添加所有“未声明的已使用...”导致大多数传递依赖项的重复,从而导致花费更多时间来读取和管理它们。

  2. 删除所有“未使用的已声明...””可能导致运行时的错误,因为它们是:由反射调用或专门声明以覆盖已在第三方依赖项中使用的同一工件的版本(最好将其编译范围更改为运行时,而测试范围应保持不变以避免将它们泄漏到生产包)或添加以声明使用某些第三方库的可选传递依赖项等。


推荐