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

时间:2012-07-11 14:17:07

标签: java maven dependency-management

我正在开发一个大型项目,该项目包含大约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

2 个答案:

答案 0 :(得分:7)

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

运行

可能是个好主意
mvn dependency:analyze -DscriptableOutput=true 

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

答案 1 :(得分:3)

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

  1. 添加所有“未使用的未申报...”会导致大多数传递依赖项的重复,导致花费更多时间阅读和管理它们。

  2. 删除所有“未使用的声明...”可能会导致运行时出错,因为它们是:通过反射调用或专门声明覆盖已在第三方依赖项中使用的相同工件的版本(更改)他们的编译范围更适合运行时,而测试范围应该不受影响,以避免泄漏到生产包)或添加以声明使用某些第三方库等的可选传递依赖。