444

如何从现有 Java 代码生成 UML 图(尤其是序列图)?

4

16 回答 16

261

ObjectAid UML 资源管理器

是我用的。它很容易从存储库中安装:

Name:     ObjectAid UML Explorer
Location: http://www.objectaid.com/update/current

并产生了相当不错的 UML 图:

截屏

来自网站的描述:

ObjectAid UML Explorer 与其他 UML 工具不同。它使用 UML 符号来显示现有代码的图形表示,与您的文本编辑器一样准确和最新,同时非常易于使用。几个独特的功能使这成为可能:

  • 您的源代码和库是显示的模型,它们不会被反向工程成不同的格式。
  • 如果您在 Eclipse 中更新您的代码,您的图表也会随之更新;无需对源代码进行逆向工程。
  • 重构会更新您的图表以及源代码。当您重命名一个字段或移动一个类时,您的图表只会反映更改而不会失去同步。
  • Eclipse 工作区中的所有图表都会根据需要进行重构更改。如有必要,它们会从您的版本控制系统中检出。
  • 图表完全集成到 Eclipse IDE 中。您可以将 Java 类从任何其他视图拖到图表上,并且与图表相关的信息会显示在其他适用的视图中。
于 2012-01-05T23:04:28.887 回答
64

编辑:如果您是设计师,那么Papyrus是您的最佳选择,它非常先进且功能齐全,但如果您只想绘制一些 UML 图并易于安装,那么ObjectAid 非常酷,它不需要任何插件我刚刚将它安装在 Eclipse-Java EE 上,效果很好!


更新 2013 年 10 月 11 日

我最初的帖子是在 2012 年 6 月,很多东西都发生了变化,很多工具都在增长,而其他工具却没有。由于我要回去做一些建模并得到一些对帖子的回复,我决定再次安装纸莎草纸,并将再次研究其他可能的 UML 建模解决方案。UML 生成(具有同步功能)对于软件设计人员而言非常重要,但对于普通开发人员而言。

我希望 papyrus 有直接的方法将逆向工程类转换为 UML 类图,如果逆向工程具有同步功能,那就太酷了,但不幸的是,papyrus 项目充满了功能,我认为那里的开发人员已经掌握了很多,因为还有很多您对纸莎草纸所做的操作可能不会给您任何回应,并且什么也没有发生,但这无论如何都超出了这个问题的范围。

答案(2013 年 10 月 11 日)

工具

  1. 下载纸莎草纸
  2. 转到帮助 -> 安装新软件...
  3. Work with:下拉列表中,选择--All Available Sites--
  4. 在过滤器中,输入Papyrus
  5. 安装完成后重启Eclipse
  6. 重复步骤 1-3,这一次,安装Modisco

脚步

  1. 在你的 java 项目中(假设它叫做 MyProject)创建一个文件夹,例如 UML
  2. 右键单击项目名称 -> Discovery -> Discoverer -> Discover Java and inventory model from java project,将生成一个名为 MyProject_kdm.xmi 的文件。 在此处输入图像描述
  3. 右键单击项目名称文件--> 新建--> 纸莎草模型-> 并将其命名为 MyProject。
  4. 将生成的三个文件 MyProject.di , MyProject.notation, MyProject.uml 移动到 UML 文件夹中
  5. 右键单击 MyProject_kdm.xmi -> Discovery -> Discoverer -> 从 KDM 代码中发现 UML 模型,您将获得一个属性对话框,将序列化属性设置为 TRUE 以生成名为 MyProject.uml 的文件 在此处输入图像描述

  6. 将在根目录生成的 MyProject.uml 移动到 UML 文件夹,Eclipse 会询问您是否要替换它,单击是。我们在这里所做的是用生成的模型替换了一个空模型。

  7. ALT+W -> 显示视图 -> papyrus -> 模型浏览器

  8. 在该视图中,您会发现您的课程如图所示 在此处输入图像描述

  9. 在视图中右键单击根模型-> 新建图表在此处输入图像描述

  10. 然后开始从视图中抓取类到图表

一些功能

  • 显示类元素(变量、函数等)右键单击任何类->过滤器->显示/隐藏内容瞧!

  • 您可以从 Window -> pereferences -> papyrus -> class diagram 进行默认的友好颜色设置

  • 一个非常重要的设置是当你放下类时排列它们会变得狭窄,右键单击类图中的任何空白区域,然后单击全部排列

  • 模型浏览器视图中的箭头可以抓取到图表以显示概括、实现等

  • 毕竟,您的设置将显示类似的图表 在此处输入图像描述

  • 据我所知,同步不可用,您需要手动导入任何新类。

仅此而已,除非您真的需要,否则不要购买商业产品,纸莎草纸实际上很棒而且很复杂,而是捐赠或其他东西。

免责声明:我和纸莎草纸人没有任何关系,其实一开始我并不喜欢纸莎草纸,直到我做了很多研究并耐心地体验了它。当我尝试其他免费工具时,我会再次回到这篇文章。

于 2012-06-10T04:06:18.013 回答
42

你的代码库是什么?Java 还是 C++?

替代文字

eUML2 for Java 是一个功能强大的 UML 建模器,专为 Eclipse 中的 Java 开发人员设计。免费版可用于商业用途。它支持以下功能:

  • CVS 和团队支持
  • 专为具有多个可定制模型视图的大型项目而设计
  • 符合 Helios 标准
  • 实时代码/模型同步
  • 符合 UML2.1 并支持 OMG XMI
  • JDK 1.4 和 1.5 支持
  • 商业版提供:

  • 高级逆向工程

  • 强大的真实依赖分析工具
  • UML 配置文件和 MDD
  • 数据库工具
  • 可定制的模板支持
于 2008-09-09T13:23:22.723 回答
10

我是作者之一,所以答案可能有偏见。它是开源的(Apache 2.0),但插件不是免费的。如果您在本地克隆和构建它,则无需付费(显然)。

在 Intellij IDEA 上,ZenUML 可以从 Java 代码生成序列图。 在此处输入图像描述

在https://plugins.jetbrains.com/plugin/12437-zenuml-support上查看

源代码:https ://github.com/ZenUml/jetbrains-zenuml

于 2017-07-21T13:43:30.850 回答
7

PlantUML怎么样?不是为了逆向工程!!!这是在你编码之前进行工程设计的。

于 2010-10-24T08:38:27.267 回答
7

我开发了一个Maven 插件,它既可以作为插件目标从 CLI 运行,也可以作为依赖项导入并以编程方式使用解析器,@see Main#main()以了解如何操作。

它递归地呈现所需包的PlantUML src 代码,您可以在需要时手动编辑(希望您不会)。然后,通过将代码粘贴到 plantUML 页面中,或者通过下载植物的 jar,您可以将 UML 图渲染为 png 图像。

在这里查看https://github.com/juanmf/Java2PlantUML

示例输出图: 在此处输入图像描述

任何贡献都非常受欢迎。它有一组自定义输出的过滤器,但我还没有在插件 CLI 参数中公开这些过滤器。

请务必注意,它不仅限于您的 *.java 文件,它还可以从您的 maven 依赖项中呈现 UML 图 src。这对于理解您所依赖的库非常方便。它实际上使用反射检查编译的类,因此不需要源

成为第一个在 GitHub 上为它加注星标的人:P

于 2016-08-18T12:21:44.633 回答
4

I would recommend EclipseUML from Omondo for general usage, although I did experience some problems a few months back, with my web projects. They had a free edition at one point in time, but that is supposedly no longer promoted.

If you are really keen on reverse engineering sequence diagrams from source code, I would recommend jTracert.

As far as Eclipse projects themselves are concerned, the Eclipse UML2 Tools project might support reverse engineering, although I've have never seen its use in practice.

The MoDisco (Model Discovery) project Eclipse GMT project seems to be clearer in achieving your objective. The list of technology specific tools would be a good place to start with.

于 2009-04-08T23:14:59.167 回答
3

您也可以尝试使用 netbeans UML 建模器。我用它来生成我在 Eclipse 项目中使用的 javacode。您甚至可以在 netbeans 中导入 eclipse 项目,并使 eclipse 设置与 netbeans 项目设置保持同步。

我尝试了几个用于 Eclipse 的 UML 建模器,但对它们并不满意。它们要么不稳定,要么复杂,要么就是丑陋。;-)

于 2009-05-05T10:14:15.733 回答
3

我发现Green插件使用起来非常简单,可以从源代码生成类图。试试看 :)。只需将插件复制到您的插件目录即可。

于 2011-04-28T12:42:18.217 回答
3

使用 IntelliJ IDEA。要生成类图选择包并按Ctrl+ Alt+ U在此处输入图像描述

默认情况下,它只显示类名而不是所有依赖项。要更改它:右键单击 -> 显示类别...并显示依赖项: 在此处输入图像描述

要生成依赖关系图(UML 部署图)并使用 maven go View -> Tool Windows -> Maven Projects 并按Ctrl+ Alt+ U在此处输入图像描述

结果: 在此处输入图像描述

也可以生成更多其他图表。请参阅文档

于 2017-07-18T12:11:07.517 回答
2

您可以为 Eclipse 3.5 使用 EclipseUML 的 30 天评估版本:http ://www.uml2.org/eclipse-java-galileo-SR2-win32_eclipseUML2.2_package_may2010.zip 这不是最新的 3.6 版本,但非常好,而且不需要您购买它来进行测试和逆向工程。

逆向工程:http ://www.forum-omondo.com/documentation_eclipseuml_2008/reverse/reverse/reverse_engineering_example.html

现场闪存演示:http ://www.ejb3.org/reverse.swf

EclipseUML Omondo 是世界上最好的 Java 工具。在这个实时 java 同步市场上似乎只有 eUML 可以与之竞争,但是 eUML 在代码中添加了模型标签,这真的非常非常糟糕,对我来说绝对不行。

于 2011-02-03T10:08:39.093 回答
1

到目前为止,我用于逆向工程和往返 java -> UML 的最佳工具是Borland 的 Together。它基于 Eclipse(不仅仅是一个插件)并且运行良好。

于 2008-09-22T11:53:00.840 回答
1

我注意到 Intellij 的 SequenceDiagram 插件也是一个不错的选择。

于 2018-10-05T16:32:51.267 回答
0

I suggest PlantUML. this tools is very usefull and easy to use. PlantUML have a plugin for Netbeans that you can create UML diagram from your java code.

you can install PlantUML plugin in the netbeans by this method:

Netbeans Menu -> Tools -> Plugin

Now select Available Plugins and then find PlantUML and install it.

For more information go to website: www.plantuml.com

于 2015-08-03T06:39:36.073 回答
0

Java 的另一个建模工具是(我的)网站GitUML。从存储在 GitHub 存储库中的 Java 或 Python 代码生成 UML 图。

GitUML 的一个关键思想是解决“文档”的问题之一:图表总是过时的。使用 GitUML,当您使用 git 推送代码时,图表会自动更新。

浏览社区 UML 图,那里有一些 Java 设计模式。浏览流行的 GitHub 存储库并可视化其中的架构和模式。

图表浏览器

使用点击创建图表。没有拖放编辑器,只需单击要可视化的存储库树中的类:

选择要可视化的 java 类

底层技术是基于 PlantUML 的,这意味着您可以使用额外的 PlantUML 标记来优化您的图表。

于 2019-09-15T11:49:58.417 回答
0

有一个名为binarydoc的免费工具,它可以从Java 方法的(而不是源代码)生成, 或( ) 。UML Sequence DiagramControl Flow GraphCFGbytecode

这是为java.net.AbstractPlainSocketImpl.getInputStream生成的 java 方法的示例图binarydoc

  • 方法的控制流程图java.net.AbstractPlainSocketImpl.getInputStream

控制流图

  • 方法的UML序列图java.net.AbstractPlainSocketImpl.getInputStream

UML 序列图

于 2020-03-07T23:20:24.917 回答