代码之家  ›  专栏  ›  技术社区  ›  VonC

Java包周期检测:如何找到特定的类?[关闭]

  •  37
  • VonC  · 技术社区  · 16 年前

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

    我知道 classycle JDepend 但它们都未能列出循环包依赖关系中涉及的类。 Metrics 有一个有趣的循环的图形表示,但它又局限于包,有时很难阅读。

    我累了,想得到一个:

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

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


    RiiTube…宣布结果的时间:

    @谢谢你的努力。我会投票给你(当我有足够的代表时),特别是对于“上限”的答案…但是盖帽死在水里了,不能再和我的Eclipse3.4兼容了。其余的是商业性的,我只寻找免费软件。

    @丹尼尔6651:谢谢你,但是,如前所述,只有免费软件(很抱歉,一开始没有提到它)。

    @作为findbugs的频繁用户(现在使用最新的1.3.5),我只需点击一下就可以接受您的答案…如果你能向我解释什么选项可以激活findbug来检测任何循环。只有在 0.8.7 version in passing (寻找) 用于查找类之间循环依赖关系的新型检测器 '),我无法测试它。 更新:它现在可以工作了,我有一个旧的findbugs配置文件,其中该选项没有被激活。我还是喜欢 CAD 虽然;

    答案是…看见 my own (second) answer below

    9 回复  |  直到 7 年前
        1
  •  14
  •   Peter Mortensen icecrime    7 年前

    findbugs可以检测循环类依赖项,并且还具有Eclipse插件。

    http://findbugs.sourceforge.net/

        2
  •  25
  •   Community CDub    8 年前

    好。。。测试后 DepFinder presented above 结果表明,它对于快速检测简单的依赖关系是很好的,但它不能很好地随类的数量而扩展…

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

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

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

    screenshot

        3
  •  4
  •   Stijn Van Bael    15 年前

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

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

        4
  •  4
  •   Peter Mortensen icecrime    7 年前

    也有 Structure101 应该这样做。

        5
  •  4
  •   Peter Mortensen icecrime    7 年前

    Highwheel 检测类和包循环,并将依赖项的源向下报告到指示关系类型(继承、组合、方法签名的一部分等)的类/方法/字段级别。

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

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

        6
  •  1
  •   Peter Mortensen icecrime    7 年前

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

    Cap有一个图形化的包视图,它将向您显示类的行,因此在单击(取决于圆的大小)之后,您将找到罪犯。

        7
  •  1
  •   Peter Mortensen icecrime    7 年前

    第一个可能的答案是…不漂亮。但它开始做我想要的 (更好的解决方案是 presented below )

    Dependency Finder ! Download it 解开它。

    它不是最现代或最活跃的项目,但是如果您编辑[dependency finder]/bin/dependency finder.bat,添加默认“dependency finder”主页的路径,设置一个Java主页,就可以启动它。

    然后单击“提取”按钮(ctrl-e-first按钮),输入类路径,让它扫描掉。

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

    • 只选择左侧的“classes”(“编程元素”)。
    • 只选择右侧的“classes”(“closures”)。
    • 添加“/javax”?./,/org./,/sun./“作为排除模式(用于编程元素和闭包)。
    • 点击轮子(最后一个按钮-全部计算- Ctrl键 + )

    给你。

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

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

        8
  •  0
  •   daniel6651    16 年前

    有一些商业工具:structure101&lattix可用于此目的。

        9
  •  0
  •   Peter Mortensen icecrime    7 年前

    一个能做到这一点的工具是软件 tomograph . 它是商业的,用户界面很糟糕:o

    推荐文章