【问题标题】:How can I identify unnecessary jars included in my project?如何识别项目中包含的不必要的 jar?
【发布时间】:2010-11-03 23:32:08
【问题描述】:

我正在使用 Apache 的轴 2 库的 Java 项目中工作。 axis 2 库由大约 20 个 jar 文件组成,其中一些是未使用的项目。我想知道是否有一种方法可以识别哪些 jar 文件是未使用的。

我正在使用 Eclipse IDE,我认为解决问题的一种方法是每次添加一个 jar,直到我没有收到有关缺少的类的错误消息。但是,我不确定这是否会起作用,因为某些缺少的类错误仅在运行时出现。

有人知道解决这个问题的更好方法吗?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    传闻FTW

    http://www.jboss.org/tattletale

    JBoss Tattletale 是一个工具,可以帮助您了解您正在从事的项目或您所依赖的产品。

    该工具将为您提供可以帮助您的报告

    • 识别 JAR 文件之间的依赖关系
    • 判断一个类是否位于多个 JAR 文件中
    • 判断同一个 JAR 文件是否位于多个位置
    • 每个 JAR 文件需要和提供的内容列表

    【讨论】:

    • 我会尝试 tattletale。有谁知道 tattletales 是否能够识别运行时类依赖关系?
    • 什么是“运行时类依赖”?如果你的意思是反射、Class.forName 和其他东西,我猜不是。
    • 运行时依赖不仅指反射代码,还指传递依赖,即 A 依赖 B 依赖 C。您的应用程序可能编译得很好,但部署时会失败,因为 C 不存在。
    • 看起来这个问题比我最初预期的要难解决。
    • 问题是我认为轴 2 使用反射......所以在这种情况下,tattletale 解决方案可能不起作用。
    【解决方案2】:

    我会按照你最初的想法,每次添加一个 jar 直到它编译。

    您说得对,您仍然可以找到运行时错误,但除非应用程序太大而无法通过手动测试进行良好覆盖,否则我会简单地运行并测试它以添加任何丢失的 jar。

    【讨论】:

      【解决方案3】:

      我认为您不能可靠地删除 jar,因为类可能会在运行时解析,例如使用

      Class.forName(className);
      

      您也许能够确定用于上述内容的类名,但这不太可能。

      由于将在运行时请求/解析类,因此您可以运行(综合)测试套件以确定内容是否仍然有效。但最终我会非常谨慎地从像 Axis 这样的包中删除 jars。我想他们是有目的的。 jar 文件大小真的有问题吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 2011-09-08
        • 2012-03-13
        • 1970-01-01
        相关资源
        最近更新 更多