【问题标题】:Find unused gradle runtime dependencies查找未使用的 gradle 运行时依赖项
【发布时间】:2016-12-20 09:24:50
【问题描述】:

我正在更新大量遗留 Java 应用程序。当前构建使用 ant,其依赖项来自每个项目的 lib 目录。依赖项是每个项目的一部分,并已签入源代码控制。更新的目的是将构建转换为 gradle 并使用 maven 存储库进行依赖管理。为简单起见,旧版本使用 ant 构造从其他项目的 lib 目录复制依赖项,例如:

<fileset dir="../anotherlegacyproject/lib">
    <include name="**/*.jar" />
</fileset>

此方法用于编译和运行时依赖项。虽然这可行,但它会导致部署工件膨胀,因为其中包含许多在运行时不需要的 jar。例如,许多项目在 runtime 中包含 junit、hamcrest 和 jaxb-xjc,即使它们仅用于 compiletest .大多数项目都创建一个 zip 文件和一个包含可部署应用程序的 RPM。我想在 RPM 中包含所需的运行时依赖项。

我正在尝试确定一种可靠的方法来识别这些未使用的运行时依赖项。

我已经查看了帖子:How to find\remove unused dependencies in gradle,但这并没有解决未使用的运行时依赖项。我曾尝试使用以下 gradle 插件,但没有一个能识别未使用的运行时依赖项:

  • github.com/nebula-plugins/gradle-lint-plugin
  • github.com/wfhartford/gradle-dependency-analyze
  • docs.gradle.org/current/userguide/jdepend_plugin.html

我愿意接受任何可靠的解决方案,但我的偏好是这样的:

  1. 现有的 gradle 插件
  2. 可以合并到 build.gradle 文件中的代码或打包为插件的 groovy 代码
  3. 其他的

【问题讨论】:

  • 这是一个有点复杂的问题——如果你的代码执行运行时反射怎么办?即使是静态分析也无济于事。
  • 但老实说,一个充满 Jars 的源代码控制的 lib 目录还是很恶心。如果您冒险尝试并用 Maven 依赖项替换它们,那么您的情况会好得多。 (这样做所涉及的工作将使您当前的问题变得毫无意义。)
  • 毫无意义,因为无论如何您都必须一个接一个地评估每个 Jar(以便找出其等效的 Maven 坐标)。确定 compiletestCompile 是否需要它并不需要花费更多的精力。
  • 我已经完成了确定maven坐标的所有工作。我使用与旧项目相同的所有依赖项在 gradle 中复制了旧 RPM。我要解决的问题是运行时,而不是编译或 testCompile。 junit 参考只是一个例子。更现实的例子是 org.elasticsearch:elasticsearch:2.3.2,它有 37 个依赖项,其中只有 5 个是测试的。如果在运行时不使用其他 32 个依赖项,我不想继续包含它们。
  • 好的,我认为这与我最初的评论基本相似 - 这感觉不像是可以通过静态方式实现的。

标签: java maven gradle dependencies


【解决方案1】:

最近我们将一些项目从 1.6 迁移到 1.8,需要找出未使用的 jar。我试图使用一些插件和工具,但无法解决我的问题。 由于堆栈溢出,我得到了一些解决这个问题的见解。以下是找出项目中未使用的jar的步骤。

  1. 首先,您需要获取模块的最新 EAR/WAR。假设你 模块名称是 CheckDependency,所以获取最新的 EAR/WAR 并获取它 出 lib 文件夹。
  2. 现在在 Eclipse 中,将模块的 lib 文件夹替换为新的,即 取自 EAR/WAR。
  3. Eclipse 转到您的模块并选择 Gradle(STS)[这应该是 安装在你的机器上]-->点击Task Quick Launcher-->选择projectTattleTaleReport会生成 您的目标文件夹中所有名为 tattleReport 的报告

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2015-09-16
    • 2020-03-31
    相关资源
    最近更新 更多