2008-09-15 44 views
31

你会推荐什么工具来检测Java包循环依赖
知道,我们的目标是列表中明确参与检测的“跨包周期”具体类?java包循环检测:如何找到涉及的具体类?

我知道classycleJDepend,但他们都没有列出涉及循环包依赖的类。
Metrics有一个有趣的循环图形表示,但又局限于软件包,并且在某些时候很难阅读。

我厌倦获得:

“你有这3个包间包循环依赖
你必须在每个
好运XXX班找到正确的类并打破这个循环“

你知道任何一种工具, tra步骤来实际解释为什么检测到周期(即, '列出涉及的类')?


Riiight ...时间宣布结果:

@ l7010.de感谢你的努力。我会投票给你(当我有足够的代表)时,尤其是对'CAP'的回答...但是CAP死在水中,不再与我的Eclipse 3.4兼容。其余的是商业,我只寻找免费

@ daniel6651谢谢你,但正如所说,免费只(抱歉没有首先提到它)

@izb作为的FindBugs一个经常使用(使用最新的1.3.5),我只需点击一下即可接受您的答案......如果您可以向我解释有什么选项可以激活findbug来检测任何周期。该功能仅针对0.8.7 version in passing(查找'新样式探测器以找到类别之间的循环依赖关系'),并且我无法对其进行测试。
更新:现在工作,我有一个老的findbugs配置文件,其中该选项未被激活。我还是喜欢CAD虽然;)

答案是...看到my own (second) answer below

+0

只需在问题中提供答案。吉普信息一起。 – 2009-12-01 08:11:31

回答

1

而且你可以使用开源工具CAP,它是一个eclipse插件。 http://cap.xore.de/ CAP有一个图形软件包视图,它会告诉你类的行,所以点击一下后(取决于圆圈的大小),你会发现罪魁祸首。

0

有一些商业工具:Structure101 & Lattix可以用于这一目的。

1

第一个可能的答案是...并不漂亮。但它开始做我以后的事情。 (更好的解决方案是presented below

Dependency FinderDownload it,解压缩它。

不是迄今为止最现代或最活跃的项目,但是如果编辑[Dependency Finder] /bin/DependencyFinder.bat,为DEFAULT_DEPENDENCYFINDER_HOME添加路径,设置JAVA_HOME,则可以启动它。

然后你点击“提取”按钮(CTRL-E - 第一个按钮),输入你的类路径,让它扫描了。

棘手的部分是不被在结果的详细程度淹没单击完全正确的一组“编程元素”和“关闭”的项目,在顺序。

  • 仅选择“阶级”在左边的右边(“编程元素”)
  • 只能选择“类”(“关闭”)
  • 添加“/javax?./,/ org./,/sun./”为排除模式(用于编程元素和关闭)
  • 点击轮(最后一个按钮 - 计算所有 - CTRL A)

在这里你去。
只要看到“< - >”,你拥有属于自己的漂亮循环依赖
(如果选择了“关闭”的一面“功能”,
你甚至可以知道什么功能不触发周期 - 真棒 - )

我愿意测试任何其他建议。

21

嗯...测试后DepFinder presented above,事实证明这是伟大的快速检测简单的相关性,但它不与类的数量很好地扩展...

所以真正的实际的答案是: CDA - Class Dependency Analyzer

它是快速的,最新的更新,易于使用,并且具有类图形表示以及它们的循环依赖提供。梦想成真;)

你必须创建在其中输入你的类(的.class)的只有目录工作集(不需要有一个完整的类路径)
选项“检测循环依赖 - ALT “ - C”作为广告使用,并且不会花费数小时100%的CPU来分析我的468类。
注意:要刷新工作区,需要再次打开它(!),以触发对类的新扫描。

screenshot

+0

真的很不错的工具。 – 99Sono 2016-05-28 12:04:01

3

Highwheel检测类和包循环并报告依赖性的源极下降到指示所述关系的(方法签名等的继承,组合物,部分)的类型的类/方法/场水平。

它还将大周期分解为可以单独理解/处理的子元素。

https://github.com/hcoles/highwheel

输出是HTML与需要一个现代浏览器内嵌SVG。