【问题标题】:Find shared library usage查找共享库使用情况
【发布时间】:2017-05-02 12:06:27
【问题描述】:

我有一个大型共享 Java 库,其中包含多个 Java 应用程序使用的许多类。但是,有些类根本不使用,有些类只由一个应用程序使用,所以它不应该存在于共享库中。

问题在于找出哪些类未被大量应用程序(超过 100 个)使用。重要的是我希望能够自动化查找未使用代码的过程,例如通过运行脚本或类似的,所以这不会最终成为一个人必须不时做的手动过程。这就是为什么我认为 IntelliJ 的“查找使用”功能是不可能的。

一些有用的信息:

  • 库和应用程序托管在同一个 Bitbucket 安装中
  • 所有 Maven 工件都托管在同一个 Nexus 上

是否有任何工具或库可以解决在不涉及手动处理的共享库中查找未使用代码的任务?

【问题讨论】:

    标签: java maven dependencies lib


    【解决方案1】:

    IntelliJ 社区和终极版

    你会手动做:

    • 转到 IntelliJ 并打开您的项目
    • 按菜单栏上的分析
    • 按名称运行检查...
    • 输入“未使用的声明”
    • 仅选择课程
    • 按确定

    如果要批量删除,可以选择多个条目,然后右键单击并安全删除。

    这也解释了here

    为了从命令行运行与上述相同的操作并生成报告,您需要按照here 中描述的步骤操作。最后一页可能没有提供足够的信息。因此,我将总结完成这项工作所需的步骤。

    要离线运行检查,您可以:

    • 转到 IntelliJ 并打开您的项目
    • 设置
    • 编辑器
    • 检查
    • 从配置文件下拉列表中选择一个配置文件并克隆它,然后为其命名(例如:UnusedDeclaration)
    • 接下来取消选择除 Java > 声明冗余 > 未使用的声明之外的所有内容
    • 选择 Java > 声明冗余 > 未使用声明,以自定义此检查,然后取消选中所有内容并仅选择 ,以便仅检查类
    • 好的

    这些步骤的结果是您在项目中获得了包含所有设置的新 XML。例如,如果您将个人资料命名为“UnusedDeclaration”,那么您将获得<proj>/.idea/inspectionProfiles/UnusedDeclaration.xml

    现在关闭 IntelliJ 实例很重要,否则将无法正常工作。

    转到命令提示符并键入类似于此的内容(对于 Windows 机器):

    D:\>C:\Users\andre\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\171.4249.39\bin\inspect.bat D:\MyProjects\MyProject D:\MyProjects\MyProject\.idea\inspectionProfiles\UnusedDeclaration.xml D:\results

    注意:这适用于 Windows 机器,但对于 Linux 或 Mac,您将使用 inspect.sh 而不是 inspect.bat

    注意:我使用Toolbox 安装IntelliJ。这很有用,因为我可以管理整个套件的安装和更新。因此,我的 IntelliJ 安装位于 C:\Users\andre\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\171.4249.39\

    通过运行前面的命令,您将获得以下行为:

    • inspect.bat 使用相关的命令行参数运行
    • 参数1:项目目录(例如:D:\MyProjects\MyProject
    • 参数 2:配置文件 XML(例如:D:\MyProjects\MyProject\.idea\inspectionProfiles\UnusedDeclaration.xml
    • 参数3:输出路径(例如:D:\results

    因此,您将获得包含D:\results\unused.xml 下所有未使用类的报告。

    IntelliJ Ultimate

    以下可以手动完成,但我发现它对于您需要分析代码的使用方式非常有用,包括确定是否根本不使用类/命名空间/模块。

    你可以:

    • 转到 IntelliJ Ultimate 并打开您的项目
    • 分析
    • 分析依赖矩阵
    • 好的

    将出现一个具有依赖关系的矩阵。

    如果一行为空(无数字),则不使用该部分。

    您可以右键单击并安全删除相应的选择。

    您可以 R-click > Find usages - 以查看特定部分的使用位置。

    可以在here找到此功能的简要说明。

    JArchitect

    JArchitect 提供了许多功能,似乎是分析大型项目和确保代码质量的完整解决方案。

    它可以提供类似于 IntelliJ Ultimate 的Dependency Matrix

    它还提供了一种语言CQLinq,您可以使用它来查询您的代码库。例如,确定未使用的类。此外,您还可以生成报告并创建阈值并集成到您的正常持续集成过程中。因此,例如,如果某些类未使用,您可以fail a build

    注意:有一些答案,例如 this one,其中讨论了更多用于分析依赖关系的工具。

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 2015-09-30
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多