【问题标题】:Finding unused jars used in an eclipse project查找 Eclipse 项目中使用的未使用的 jar
【发布时间】:2010-09-19 21:36:52
【问题描述】:

是否有任何插件/工具可用于通过 Eclipse 项目(或工作区)的类路径并突出显示任何未使用的 jar?

【问题讨论】:

    标签: java eclipse jar


    【解决方案1】:

    ClassPathHelper 是一个好的开始。

    它会自动识别孤儿罐等等。

    唯一的限制是未在类中定义的依赖项,例如在依赖注入框架配置文件中。

    您还有其他选择/补充,例如:

    • workingfrog "Relief",它依赖于通过检查它们的形状、大小或在空间中的相对位置来处理真实对象的能力,它提供了关于 java 包、类型和字段及其关系的“物理”视图,使它们更容易处理。
    • Unnecessary Code Detector:一个 Eclipse 插件工具,用于查找不必要的(死)公共 java 代码。

    【讨论】:

    • 类似的问题有不同的答案stackoverflow.com/questions/1012298/…
    • @VonC 提到的第一个链接似乎已移动/损坏
    • @manocha_ak 是的,关于 workingfrog 的 Relief 项目已不复存在。我已经恢复了指向该站点的 web.archive.org 链接。
    • 仍然无法理解。你可以单独或以其他方式发送给我吗?
    • @manocha_ak 我明白了,但只保留了网页,而不是存档。据我所知,那个项目已经消失了。
    【解决方案2】:

    您可以使用以下插件之一: UCDetectorClasspath Helper

    【讨论】:

      【解决方案3】:

      UCDetector 对此没有帮助:它不适用于 JAR。 对于 classpathHelper,我无法找到一种简单的方法来列出孤儿 JAR(顺便说一句,如果有人有这方面的教程,我很感兴趣)。

      所以,如果你也像我一样使用 Maven,我发现 this great Maven plugin,我想与你分享这个解决方案。 只需输入:

      mvn dependency:analyze
      

      您将立即获得依赖项中未使用的 JAR 列表。 很方便!

      【讨论】:

      • 非常感谢mvn dependency:analyze 的提示。它以一种非常简单的方式完成这项工作。在我看来,这比使用提到的其他工具之一要简单得多。
      • 请注意mvn dependency:analyze 可能会给出错误否定:例如,如果依赖类通过Class.newInstance()Constructor.newInstance() 实例化并通过接口进行操作,则它无法发现依赖关系。这是使用像 Spring 这样的依赖注入框架的项目中的常见场景。不过,这是一个很好的起点。
      【解决方案4】:

      我知道这是一个旧的,但如果其他人偶然发现了这个,Eclipse 会自行完成。

      导航到项目属性->Java 代码样式->清理 选择 Eclipse [Built-in] 并执行以下操作:

      • 使用声明类型更改对静态成员的非静态访问
      • 将对静态成员的间接访问更改为直接访问 (通过子类型访问)
      • 删除未使用的导入
      • 添加缺少的“@Override”注释
      • 为接口的实现添加缺少的“@Override”注释 方法
      • 添加缺少的“@Deprecated”注释
      • 删除不必要的演员表
      • 删除不必要的“$NON-NLS$”标签

      【讨论】:

      • 这不是我要问的。我想找出项目中包含哪些不需要的罐子。清理是一项不同(但仍然有用)的工作。干杯!
      【解决方案5】:

      我找到了一个非常快速有趣的工具来归档这个目标:

      http://tattletale.jboss.org/

      只需解压程序并运行:

      java -Xmx512m -jar tattletale.jar ~/myjavaproject/mydistribution output
      

      这将生成一个非常令人印象深刻的报告,其中包含不同的点(来自他们网站的文本):

      • 识别 JAR 文件之间的依赖关系
      • 从类路径中查找缺失的类
      • 判断一个类/包是否位于多个 JAR 文件中
      • 判断同一个 JAR 文件是否位于多个位置
      • 每个 JAR 文件需要和提供的内容列表
      • 验证类的 SerialVersionUID
      • 查找具有不同版本号的类似 JAR 文件
      • 查找没有版本号的 JAR 文件
      • 查找未使用的 JAR 档案
      • 识别密封/签名的 JAR 档案
      • 在 JAR 文件中定位类
      • 获取项目的 OSGi 状态
      • 删除列入黑名单的 API 使用
      • 并为您的 .WAR 和 .EAR 档案生成相同的报告

      【讨论】:

      • 谢谢。它似乎工作正常。它需要在编译后的.jars 上调用,而不是在.java 文件上调用。
      • 我试过这个,安装,它工作,但它没有告诉我哪些罐子是不必要的。它为此创建了一个页面,但它只列出了整个应用程序的主要 WAR 文件,这显然是“错误的”,并且它没有在应用程序中找到不必要的 JAR。
      【解决方案6】:

      在 Maven 和 Gradle 项目中,您可以使用这些插件来识别未使用的依赖项。

      • 对于 Maven:link

      在 pom.xml 文件插件中使用它。

      <build>
      <plugins>
          <plugin>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>3.1.2</version>
          </plugin>
      </plugins>
      </build>
      

      这将作为输出。在这种情况下,我们将 commons-collections 依赖添加到 pom.xml,但不要在代码中使用。

      • 对于 Gradle:link

      在 build.gradle 文件插件中使用它。

      plugins {
        id "ca.cutterslade.analyze" version "1.7.1"
      }
      

      使用旧版插件应用程序:

      这将作为输出。在这种情况下,我们将依赖项未使用DeclaredArtifacts 添加到 gradlefile,但不要在代码中使用。

      【讨论】:

      • 如果可能的话,请添加简短的示例说明如何操作,以防将来链接中断。
      猜你喜欢
      • 2011-07-30
      • 2014-05-06
      • 2017-02-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多