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

Ale*_*exR 14 java dependency-management maven

我正在开发一个大型项目,该项目由大约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
Run Code Online (Sandbox Code Playgroud)

khm*_*ise 7

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

跑步可能是个好主意

mvn dependency:analyze -DscriptableOutput=true 
Run Code Online (Sandbox Code Playgroud)

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

  • - 这将为您提供XML,您可以根据需要将其粘贴到pom中。应该省些打字。为了方便起见,片段按pom分组。mvn依赖项:analyze -DscriptableOutput = true | grep“ \\ $ \\ $ %%%” | awk'{split($ 1,arr,“:”); poms [arr [2]] = poms [arr [2]]“ <依赖关系> \ n <groupId>” arr [3]“ </ groupId> \ n <artifactId>” arr [4]“ </ artifactId> \ n <version>“ arr [6]” </ version> \ n </ dependency> \ n“} END {for(pom in poms){print pom” \ n“ poms [pom]}}''` (2认同)

And*_*yuk 4

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

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

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