【问题标题】:removing extra jars dependencies from java project从 java 项目中删除额外的 jars 依赖项
【发布时间】:2017-11-11 12:34:56
【问题描述】:

我正在将多模块 java 项目迁移到 maven。现在对于他们中的大多数人来说,我迁移到了 Maven。 最后我知道我的项目包含了很多不必要的 jar,我想清理它们。

我知道 maven 有插件命令,mvn dependency:analyze。效果很好。

dependency:analyze 分析本项目的依赖关系,确定哪些是:已使用和已声明;使用和未声明;未使用和声明。基于静态代码分析。

现在我的问题是,我如何删除报告的未使用和声明的依赖项以进行清理。这些 jar 可能在运行时被使用,而我的代码在删除后编译得非常好,但在运行时崩溃了。

示例: mycode 使用开源库 antisamy.jar 之一编译,但在运行时需要 batik.jar。并且 mvn dependency:analyze 报告我删除了 batik.jar。

我的理解是否正确,或者我需要专家意见。

【问题讨论】:

  • 请明智地使用特定于版本的标签。如果遇到一般问题,请使用不带版本的通用标签

标签: maven maven-plugin


【解决方案1】:

您的理解似乎是正确的。 但我不确定为什么你会认为有一种工具可以涵盖所有基础。 是的,如果你通过反射来使用东西,没有工具可以可靠地检测到你依赖这个类或其他类的事实。

例如考虑这个 sn-p:

String myClassName = "com." + "example." + "SomeClass";
Class.forName(myClassName);

我不认为您可以构建一个可以抓取代码并提取所有此类引用的工具。

我会改用尝试失败的方法,其中包括:

  • 删除所有dependency:analyze 说是多余的依赖项
  • 只要找到实际使用过的,只需将其添加回来

这可以很好地工作,因为我希望反射实际使用的依赖项数量非常少。

【讨论】:

  • 有些库会根据类路径中是否存在库来添加对功能的可选支持,尤其是在 Web 环境中。它不仅是反射逻辑,而且只是类路径扫描,在这里会受到严重影响。
  • 同意;然而,我敢打赌,在大多数应用程序中,这些极端情况很少发生,因此尝试失败的方法可以正常工作(特别是因为任何错误都应该很快就很明显)。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 2012-06-08
  • 2013-10-22
  • 2015-12-20
  • 2020-05-29
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多