您推荐什么工具来检测 Java包循环依赖,知道目标是 明确列出检测到的“跨包循环”中涉及的特定类?

我知道关于 经典J依赖, ,但它们都未能列出循环包依赖项中涉及的类。 指标 有一个有趣的循环图形表示,但它再次仅限于包,并且有时很难阅读。

我厌倦了得到:

“这 3 个包之间存在包循环依赖关系
你们每个班都有 xxx 门课
祝你好运找到合适的课程并打破这个循环”

您是否知道有任何工具可以采取额外的步骤来实际向您解释为什么检测到循环(即'列出涉及的类')?


对了...公布结果的时间:

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

@丹尼尔6651:谢谢,但是,如上所述,仅限免费软件(抱歉一开始就没有提到)。

@izb 作为 findbugs 的频繁用户(现在使用最新的 1.3.5),我只需点击一下即可接受您的答案...如果你能向我解释一下有什么选项可以激活 findbug 来检测任何循环。仅提及该功能 0.8.7版本顺便 (寻找 '用于查找类之间循环依赖关系的新型检测器'),我无法测试它。更新:它现在可以工作了,我有一个旧的 findbugs 配置文件,其中该选项未激活。我还是喜欢 计算机辅助设计 尽管 ;)

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

有帮助吗?

解决方案

Findbugs 可以检测循环类依赖关系,并且也有一个 Eclipse 插件。

http://findbugs.sourceforge.net/

其他提示

出色地...测试后 上面介绍的 DepFinder, ,事实证明它对于快速检测简单的依赖关系非常有用,但它不能很好地随着类的数量而扩展......

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

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

您必须创建一个工作集,在其中仅输入类的目录 (.class)(不需要完整的类路径)
选项“检测循环依赖 - 丙氨酸转氨酶-C“就像广告一样,不会占用 100% 的 CPU 几个小时来分析我的 468 类。
笔记:要刷新工作区,您需要再次打开它(!),以便触发对您的类的新扫描。

screenshot

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

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

还有 结构101 应该这样做。

高轮 检测类和包循环,并报告依赖关系的来源,直至类/方法/字段级别,指示关系的类型(继承、组合、方法签名的一部分等)。

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

输出是嵌入 SVG 内容的 HTML,需要现代浏览器。

您可以使用开源工具 这是一个 Eclipse 插件。

CAP 有一个图形包视图,它会向您显示类的行,因此单击几次(取决于圆圈的大小)后,您将找到罪魁祸首。

第一个可能的答案是......不漂亮。但是它确实开始做我追求的事情(更好的解决方案是 下面介绍).

依赖查找器! 下载它, ,解压缩。

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

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

棘手的部分是准确单击正确的“编程元素”和“闭包”项集,以免被结果中的详细信息级别所淹没。

  • 仅选择左侧的“类”(“编程元素”)。
  • 仅选择右侧的“类”(“闭包”)。
  • 添加“/javax?./,/org./,/sun./”作为排除模式(对于编程元素和闭包)。
  • 单击轮子(最后一个按钮 - 计算所有 - 控制键 + A).

就这样吧。

每当你看到“<->”时,你就已经得到了一个很好的 循环依赖. 。(如果您在“闭包”一侧选择“功能”,您甚至可以知道哪个功能触发了循环 - 太棒了。)

我准备测试任何其他建议。

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

执行此操作的一种工具是软件 断层扫描仪. 。它是商业性的,用户界面很糟糕:o

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top