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

Java package cycle detection: how do I find the specific classes involved?

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

我知道classycle和JDepend,但是它们都无法列出循环软件包依赖项中涉及的类。度量标准具有有趣的循环图形表示形式,但它又仅限于软件包,并且有时很难读取。

我很累得到:

" you have a package cycle dependency between those 3 packages
you have xxx classes in each
good luck finding the right classes and break this cycle"

您是否知道需要采取额外步骤才能真正向您解释为什么检测到周期的任何工具(即"列出所涉及的类")?

Riiight ...现在宣布结果:

@ l7010.de:谢谢您的努力。我会投票赞成(当我将有足够的代表时),特别是对于" CAP"答案……但是CAP已死在水中,不再与我的Eclipse 3.4兼容。其余都是商业用途,我只寻找免费软件。

@ daniel6651:谢谢,但是,正如所说的,仅是免费软件(对不起,我们一开始没有提到它)。

@izb是findbugs的经常使用者(现在使用最新的1.3.5),我一键即可接受您的答案...如果您可以向我解释激活findbug来检测任何周期的选项是什么。该功能仅在通过中提到0.8.7版本(请查找"新样式检测器以查找类之间的循环依赖项"),而我无法对其进行测试。
更新:现在可以正常工作了,并且我有一个旧的findbugs配置文件,其中该选项未激活。我还是喜欢CAD;)

答案是...请参阅下面我自己的(第二个)答案


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

因此,实际答案是:
CDA-类依赖分析器

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

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

screenshot


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

http://findbugs.sourceforge.net/


Highwheel会检测类和包的周期,并在类/方法/字段级别报告依赖项的来源,以指示关系的类型(继承,组成,方法签名的一部分等)。

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

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


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

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


还有Structure101应该执行此操作。


第一个可能的答案是……不漂亮。但是它确实开始做我所追求的
(下面提供了一个更好的解决方案)。

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

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

然后,单击"提取"按钮(CTRL-E-第一个按钮),输入您的课程路径,然后将其扫描掉。

棘手的部分是完全单击正确的"编程元素"和"关闭"项集,以免被结果中的细节水平所淹没。

  • 在左侧仅选择"类"("编程元素")。
  • 在右侧仅选择"类"("关闭")。
  • 添加" /javax?./、/org./、/sun./"作为排除模式(用于编程元素和闭包)。
  • 单击轮子(最后一个按钮-全部计算-Ctrl + A)。

然后你去。

每当您看到'<->'时,您就会得到一个很好的循环依赖关系。 (如果您在"关闭"一侧选择"功能",您甚至可以知道是什么功能触发了周期-太棒了。)

我准备测试其他建议。


您可以使用开源工具CAP,它是Eclipse插件。

CAP具有图形化的程序包视图,该视图将向您显示类的行,因此在单击几下(取决于圆的大小)后,您将找到罪魁祸首。


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


层析成像仪是实现此目的的一种工具。这是商业性的,UI很烂:o


推荐阅读

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux循环命令大全?

    linux循环命令大全?,工作,地址,系统,命令,工具,代码,目录,连续,环境,管理,Lin

    循环执行linux命令?

    循环执行linux命令?,工具,系统,名称,代码,第一,环境,位置,数字,脚本,变量,Lin

    开发linux命令工具?

    开发linux命令工具?,系统,工具,环境,状态,平台,设计,数据,电脑,中小企业,标

    linux命令行工具大全?

    linux命令行工具大全?,工作,系统,工具,地址,信息,命令,目录,基础,管理,文件,l

    linux检测硬件的命令?

    linux检测硬件的命令?,信息,系统,检测,工具,第一,数据,设备,分析,实时,百度,

    linux命令联想工具?

    linux命令联想工具?,地址,工作,系统,工具,状态,标准,信息,命令,目录,左下角,L

    linux命令超时检测?

    linux命令超时检测?,时间,网络,检测,系统,地址,状态,电脑,代码,软件,设备,lin

    linux循环复制命令?

    linux循环复制命令?,系统,文件,命令,目录,地址,源文件,文件夹,目标,文件名,

    linux下端口检测命令?

    linux下端口检测命令?,检测,系统,状态,工具,情况,端口,网络,服务,灵活,信息,l

    linux命令工具怎么用?

    linux命令工具怎么用?,地址,系统,工作,单位,工具,密码,服务,命令,处分,基础,

    linux命令行写循环?

    linux命令行写循环?,工作,系统,地址,命令,情况,定期,基础,连续,信息,文件,Lin

    linux命令行截图工具?

    linux命令行截图工具?,工具,电脑,软件,系统,截图,网站,工作,环境,暂停,命令,L

    linux命令工具教程?

    linux命令工具教程?,系统,工具,信息,基础,基础知识,代码,在线,地址,项目,服

    linux命令行渗透工具?

    linux命令行渗透工具?,系统,发行,网络,工具,信息,地址,管理,数据,工程,中国,

    linux循环命令脚本?

    linux循环命令脚本?,代码,系统,增长,工具,官网,项目,流程,数据,数字,底部,lin

    linux跳出死循环命令?

    linux跳出死循环命令?,系统,地址,数字,代码,官方网站,网络,工作,工具,信息,

    linux检测摄像头命令?

    linux检测摄像头命令?,系统,工具,情况,实时,信息,状态,平均,设备,检测,数据,L

    linux检测进程命令?

    linux检测进程命令?,系统,服务,地址,状态,信息,检测,进程,命令,第一,软件,lin

    linux卸载工具命令?

    linux卸载工具命令?,软件,系统,工具,名称,电脑,信息,命令,终端,程序,提示符,l