0

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

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

一些有用的信息:

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

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

4

1 回答 1

0

IntelliJ 社区和终极版

手动你会这样做:

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

如果要批量删除,可以选择多个条目,然后 R-Click 和安全删除。

此处也对此进行了解释。

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

为了离线运行检查,您可以:

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

这些步骤的结果是您在项目中获得了包含所有设置的新 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 - 以查看特定部分的使用位置。

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

建筑师

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

它可以提供类似于 IntelliJ Ultimate的依赖矩阵。

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

注意:有一些类似这样的答案,其中讨论了更多用于分析依赖关系的工具。

于 2017-05-02T17:34:52.670 回答