【发布时间】:2013-04-10 23:04:51
【问题描述】:
背景:
- 我正在使用(对我而言)相当大的代码库(例如:我目前只检查了几个相关项目,以及超过 11000 个类)。
- 构建是 ant,测试是 JUnit,CI 是 Jenkins。
- 在签入前运行所有测试不是一个选项,它需要 Jenkins 几个小时。即使对于某些单独的应用,也可能需要 45 分钟。
- 有些测试不引用基于反射的单个方法,在某些情况下甚至不直接引用被测方法的类,因为它们询问聚合器类,并且知道传递模式- 通过这里使用的方法。由于它是一个庞大的代码库,超过 10 个开发人员,而且我不是负责人,这是我目前无法更改的。
我想要的是能够在签入之前打印出与 git diff 列表中的任何类相距两度(Kevin-Bacon-wise)的所有测试类的列表。这样,当我错过的某些内容最终运行并出现错误时,我可以将它们全部运行并减少来自 Jenkins 的愤怒电子邮件。
我能想到的最简单的方法是自己用 Ruby 脚本或类似的脚本编写代码,这样我就可以解释我们正在使用的一些模式,但要做到这一点,我需要能够查询“哪些类引用类 X?”
我可以解析 .java 或(更简单的).class 文件来获取此信息,但我不想 :) 有没有办法让 Javac 在编译时以简单的格式导出它?
【问题讨论】:
-
更多信息:我需要在我的工作站上运行它,以便在它们进入上游之前捕获我犯的错误,至少在我能够证明它有用之前。切换到 Git、Maven 并改进 Jenkins 流程会很好,但这不是我能做到的。
-
有很多工具可以分析类之间的依赖关系。您可能可以使用具有文本输出的内容并构建依赖关系图。还要看看 Sonar,我对此一无所知,但它应该是任何源分析的好工具