查找共享库使用情况

时间:2017-05-02 12:06:28

标签: java maven dependencies lib

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

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

一些有用的信息:

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

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

1 个答案:

答案 0 :(得分:0)

IntelliJ社区&最终

手动你会做:

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

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

这也解释了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单击并安全删除相应的选择。

你可以点击R&gt;查找用法 - 以查看特定部件的使用位置。

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

<强> JArchitect

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

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

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

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