16

我正在开发一个由大约 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
4

2 回答 2

7

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

运行可能是个好主意

mvn dependency:analyze -DscriptableOutput=true 

它产生的输出可以非常简单地从输出中提取出来,并且可以用于进一步处理,例如用作versions-maven-plugin的输入(带有一些预转换)。

于 2012-07-11T15:14:14.543 回答
4

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

  1. 添加所有 'Used undeclared...' 会导致大多数传递依赖项的重复,从而导致花费更多时间来阅读和管理它们。

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

于 2012-07-11T14:57:32.600 回答