Java包循环检测:如何查找涉及的特定类?

Von*_*onC 38 java dependencies packages class

您会建议使用什么工具来检测Java包循环依赖关系,知道目标是明确列出检测到的"跨包循环"中涉及的特定类

我知道classycleJDepend,但它们都没有列出循环包依赖中涉及的类.度量标准有一个有趣的循环图形表示,但它再次限于包,并且很难在某些时候阅读.

我厌倦了得到一个:

"你在这3个软件包之间有一个软件包循环依赖关系,
你们每个 好运中都有xxx类
找到合适的类并打破这个循环"

你知道任何工具需要额外的步骤来实际解释为什么检测到循环(即'列出所涉及的类')?


Riiight ...时间宣布结果:

@ l7010.de:谢谢你的努力.我会投票给你(当我有足够的代表时),特别是对于'CAP'答案......但是CAP已经死了,不再与我的Eclipse 3.4兼容了.其余的是商业广告,我只看免费软件.

@ daniel6651:谢谢你,但正如所说,只是免费软件(对不起,首先没有提到它).

@izb作为findbugs的常用用户(现在使用最新的1.3.5),我只需点击一下即可接受你的答案......如果你能向我解释一下有什么选项可以激活findbug以检测任何周期.该功能仅在0.8.7版本中提及(查找' 新样式检测器以查找类之间的循环依赖关系 '),我无法测试它.更新:它现在有效,我有一个旧的findbugs配置文件,其中没有激活该选项.我仍然喜欢CAD ;)

答案是......看下面我自己的(第二个)答案

Von*_*onC 25

嗯...在测试上面介绍的DepFinder之后,事实证明它很适合快速检测简单的依赖关系,但它不能很好地扩展类的数量...

所以真正的实际答案是: CDA - 类依赖性分析器

它快速,最新,易于使用,并提供类及其循环依赖关系的图形表示.梦想成真 ;)

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

截图


izb*_*izb 14

Findbugs可以检测循环类依赖项,也有一个Eclipse插件.

http://findbugs.sourceforge.net/


squ*_*dle 5

还有Structure101应该执行此操作。


Sti*_*ael 5

我们使用声纳来检测包裹周期。它绘制了一个很好的依赖关系图,并显示哪些依赖关系走错了方向。您甚至可以导航到使用依赖项的源。

请参阅http://www.sonarsource.org/fight-back-design-erosion-by-writing-cycles-with-sonar/

  • 此功能已从 SonarQube 5.2 ([SONAR-6553](https://jira.sonarsource.com/browse/SONAR-6553)) 中删除。 (4认同)