【问题标题】:Is there a visualization tool that can inspect a Java code base and report inter-package dependencies?是否有可以检查 Java 代码库并报告包间依赖关系的可视化工具?
【发布时间】:2011-04-19 00:50:03
【问题描述】:

我们的 Java 代码库对于单个整体 JAR(超过 5000 个类)来说已经变得太大了。我们正在调查的任务之一是将这个单一的 JAR 分解成更小的组件并在它们之间具有受控的依赖关系需要付出多大的努力。但是,查看一大包代码并确保在不进行一些分析的情况下找到最佳分离点有点困难。

是否有很好的工具来检查和可视化包间依赖关系?鉴于这些,我们将有一组建议的切点,我们可以开始分离代码。

举个例子,在 Netbeans 和 Eclipse 之前的日子里(在不同的工作中),我们使用了 TogetherJ 和 TogetherEnterprise。那些有能力进行静态包分析并绘制 UML 图。这种行为是最佳的,但仅凭该功能不足以证明成本合理。

【问题讨论】:

  • 我认为如果你需要一个工具来告诉你如何组织你的 5000 个课程,那么你遇到的麻烦比这个工具能把你拉出来的麻烦更大。祝你好运。
  • @z5h,说实话?为什么不使用工具来查找依赖项?这种工具的输出对于推动重构工作非常有用。请记住,这种方法可以帮助您识别相互耦合较弱的节点。然后,这些节点可以成为单独可交付构建产品的候选者。更短的构建时间、本地化更改等都是这种重构的强烈动机。如果有工具可以帮助指出“从这里开始,这个切割很容易”,你为什么不使用这样的东西?
  • 我只是在“评论”说,如果您正处于拥有 5000 个类的阶段,并且没有足够的应用程序架构来引导您朝着正确的方向前进,而没有工具,那么听起来情况很糟糕。这不是一个优化练习,其中一个工具会告诉你接下来要看什么。这是您的应用程序的整个架构,应该更好地处理它。如果您使用该工具来验证想法,那听起来不错。如果它引领您的设计,那听起来很可怕。您说得好像该工具将引领您的设计。
  • @z5h,不,代码不是架构。代码就是实现。该架构可以用线条画出方框并说“这是预期的设计”。检查工具可以查看代码并确保架构图上的任何框都没有隐藏连接,而它们不应该隐藏连接。例如,一个杂散的剩余“包含”可能会在两段代码之间引入依赖关系,这两条代码本不应该耦合,但现在有一个隐藏的错误依赖关系,会影响构建顺序。该工具可以检查您的代码以确保它与架构匹配。

标签: java uml dependencies packages static-analysis


【解决方案1】:

我最近发现了 CodePro AnalytiX,以前来自 Instantiations,现在可以从 Google 免费获得: https://developers.google.com/java-dev-tools/codepro/doc/features/dependencies/dependencies

【讨论】:

    【解决方案2】:

    我出于同样的目的使用了stan4j,但不幸的是社区版有 500 个课程的限制。另一方面,它作为 eclipse 扩展工作。

    【讨论】:

      【解决方案3】:

      Intellij IDEA 有一个:


      (来源:jetbrains.com

      【讨论】:

        【解决方案4】:

        JDepend 是一款免费的包依赖分析工具。

        它识别循环依赖,这将阻碍将这个单体分解成更小的部分。

        我们将这种循环依赖检查放到我们的单元测试中,从一开始就阻止它们。

        有一个对应的Eclipse plug-in

        您可以将输出发送到 GraphViz。但是,随着包数量的增加,可视化变得难以理解。

        现在 CodePro AnalytiX [上面首先由 Fabian Steeg 提到] 是免费的,值得一看。至少在被 Google 收购之前,Instantiations 可靠地生产出了出色的软件。几年前我玩过它,除了成本之外没有其他抱怨。

        【讨论】:

          【解决方案5】:

          一个很好的尝试是将您的 jar 文件反转为类图。我发现本教程解释了如何将由 jar 文件组成的项目反转为 UML 类图:http://www.ejb3.org/jar_file_reverse/jar_file_reverse.html

          您将能够在查看包关系时在包级别反转,还可以查看一个包中的类与其他包的关系。项目撤消后,您可以将其重新组织为模型并将此文档提供给实施团队。

          【讨论】:

            【解决方案6】:

            SonarJ 是一个很好的工具,但它很昂贵。

            另一个非常好的工具是XDepend,它更便宜。为了您的目的,我会向您推荐这个工具。我认为在质量/价格方面的最佳选择。

            功能少得多,您可以使用Sonar(免费和开源)分析及其依赖矩阵。

            【讨论】:

              【解决方案7】:

              这些类是否以正常方式使用包,还是所有类都在同一个包中?如果第一种情况属实,我会考虑编写一个专用工具来进行第一次切割。

              【讨论】:

              • 原始架构以合理的方式布局。然而,多年的客户要求和新的开发导致了多年的编辑,现在是时候将所有这些重新组合在一起了。一个包中的 5000 个课程会很严重,不是吗?
              • @bob cross - 确实如此。我想我必须玩一段时间才能确定如何继续。
              【解决方案8】:

              这正是我为 degraph 构建的用例。

              它允许您定义切片,即属于一起的一组类,并将它们可视化为一个可折叠节点。您要成为的 jar 将是您可以调整的切片,直到它们不再具有任何循环依赖项,此时它们可以成为自己的 jar。

              这使您可以轻松发现需要中断的切片之间的依赖关系。由于您可以打开切片节点并查看所有包含的类,因此还可以轻松识别可能的重构(引入接口、移动类..)以实现您的目标。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-06-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多