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


434

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


3
那不太可能发生。真正的Java代码的结构看起来并不像UML图。
2013年

1
如此众多的答案无法解决时序图。Hmph
Bill K

@BillK我的答案是地址序列图。这是一个IntelliJ IDEA的插件- stackoverflow.com/a/45239269/529187
小鹏-ZenUML.com

1
该问题更适合于姊妹站点“ 软件建议书堆栈交换”
罗勒·布尔克

Answers:


257

ObjectAid UML资源管理器

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

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

并生成相当不错的UML图:

屏幕截图

网站说明:

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

  • 您的源代码和库是所显示的模型,它们没有经过反向工程设计成其他格式。
  • 如果您在Eclipse中更新代码,则图也将更新。无需反向工程源代码。
  • 重构会更新您的图表以及源代码。重命名字段或移动类时,图仅反映更改而不会不同步。
  • Eclipse工作区中的所有图都将根据需要进行重构更改,以进行更新。如有必要,它们将从您的版本控制系统中签出。
  • 图已完全集成到Eclipse IDE中。您可以将Java类从任何其他视图拖到图上,并且与图相关的信息在适用的其他视图中显示。

比Papyrus更容易,但是创建图表的选项更少。
lcardosobr

在ObjectAid中,有没有一种方法可以自动安排类图?
可重用的2012年

4
操作方法>>>在此处创建帐户:objectaid.com/login(激活电子邮件在10分钟内发送),单击“图附件”,许可证将发送到您的电子邮件中。请遵循此objectaid.com/installation来安装ObjectAid,然后从download.eclipse.org/tools/gef/updates/releases安装GEF。 现在将粘贴许可证从电子邮件复制到Window-> Preferences-> ObjectAid。如何创建图表?objectaid.com/class-diagram
rluks

无法在Eclipse Juno中安装。An error occurred while installing the items session context was:(profile=epp.package.java, phase=org.eclipse.equinox.internal.p2.engine.phases.Install, operand=null --> [R]com.objectaid.uml 1.1.3, action=). Failed to prepare partial IU: [R]com.objectaid.uml 1.1.3.
Gunaseelan

1
商业版本的ObjectAid在顺序图生成与免费方面可以做得更好,而免费版本只能用于生成类图!
whoami

63

编辑:如果您是设计师,那么Papyrus是您的最佳选择,它非常先进并且具有很多功能,但是,如果您只是想勾勒出一些UML图并且易于安装,那么ObjectAid 非常酷,并且不需要任何插件刚刚通过Eclipse-Java EE安装了它,效果很好!


更新2013年10月11日

我最初的帖子是在2012年6月,很多事情已经改变,许多工具已经增长,而其他却没有。由于我将回过头来进行一些建模并获得一些回复,因此我决定再次安装纸莎草纸,并将再次研究其他可能的UML建模解决方案。UML生成(具有同步功能)对于软件设计师而言并不重要,对普通开发人员而言确实很重要。

我希望纸莎草纸具有将逆向工程类转换为UML类图的简单方法,并且如果该反向工程具有同步功能,那将非常酷,但是不幸的是,纸莎草纸项目具有许多功能,并且我认为那里的开发人员已经手头很多您对纸莎草纸进行的操作可能不会给您任何回应,并且什么也不会发生,但这仍然超出了此问题的范围。

答案(2013年10月11日)

工具类

  1. 下载纸莎草纸
  2. 转到帮助->安装新软件...
  3. 在[ 使用方式:]下拉式选单中,选取[ 所有可用的网站]
  4. 在过滤器中,输入Papyrus
  5. 安装完成后,重新启动Eclipse
  6. 重复步骤1-3,这一次,安装Modisco

脚步

  1. 在您的Java项目中(假设它称为MyProject)创建一个文件夹,例如UML
  2. 右键单击项目名称->发现-> Discoverer->从Java项目中发现Java和清单模型,将生成一个名为MyProject_kdm.xmi的文件。 在此处输入图片说明
  3. 右键单击项目名称文件->新建->纸莎草纸模型->并将其命名为MyProject。
  4. 将三个生成的文件MyProject.di,MyProject.notation,MyProject.uml移动到UML文件夹
  5. 再次右键单击MyProject_kdm.xmi->发现-> Discoverer->再次从KDM代码发现UML模型,您将看到一个属性对话框,将序列化道具设置为TRUE,以生成名为MyProject.uml的文件 在此处输入图片说明

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

  7. ALT + W->显示视图->纸莎草纸->模型资源管理器

  8. 在该视图中,您将找到图片中的类 在此处输入图片说明

  9. 在视图中右键单击根模型->新图 在此处输入图片说明

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

一些功能

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

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

  • 一个非常重要的设置是“ 安排”,当您放下课程时,他们会在狭窄的位置单击鼠标右键,然后单击“全部安排”

  • 可以将模型资源管理器视图中的箭头抓到图中以显示概括,实现等

  • 毕竟,您的设置将显示如下图 在此处输入图片说明

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

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

免责声明:我与纸莎草纸的人没有关系,实际上,我一开始不喜欢纸莎草纸,直到我进行了大量研究并耐心地进行了研究。当我尝试其他免费工具时,将再次回到这篇文章。


我在日食中搜索了Modisco。它显示为0不变。这个项目是活着的还是被带走的?它成为付费工具了吗?没有这个,纸莎草纸就不会跑吗?
R-JANA

使用过的STS失败。
R-JANA

@ R-JANA我不知道Modisco的当前状态如何,但我将尽快回到本帖子,因为我即将安装纸莎草纸,因此必须对其进行更新。我建议您考虑我目前的职位,尝试自己安装纸莎草纸;自发布此答案以来,我认为发生了很多变化。
Ismail Marmoush

有一个用于Papyrus的可选插件,该插件添加了Java逆向工程功能:wiki.eclipse.org/Java_reverse_engineering。这样,从源代码添加图元素变得更加容易,您甚至可以将类拖到图中。
Markus Ende

42

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

替代文字

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

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

  • 先进的逆向工程

  • 强大的真实依赖分析工具
  • UML配置文件和MDD
  • 数据库工具
  • 可定制的模板支持

20
这是一个很难安装的工具。我尝试了大约半小时,但没有成功。还有其他建议吗?
乔纳森

2
不能发现eUML2是我的Update Managaer,并且我不想仅通过此功能打包新的Eclipse安装程序。我正在使用Eclipse“ Helios”,并按以下方式操作:帮助-安装新软件-Helios download.eclipse.org/releases/helios-建模
OneWorld 2010年

3
我知道这是一篇旧文章,但是安装eUML2的大多数问题似乎已经解决。
安迪

7
eUML是真正的废话。它改变了我的代码格式,并在各处添加了标签。我的代码现在太脏了,我希望撤消更改。问题是没有撤消操作,您的代码将永远更改。我建议您在使用eUML crapper之前备份您的项目:-)
UML GURU

31
您听说过版本控制吗?
2011年


7

如何PlantUML?它不是用于逆向工程!!!在编写代码之前是为工程设计的。


4
没有回答这个问题,显然需要反向工程工具。
jmite 2012年

1
我不确定这是完全正确的。PlantUML还能够使用图来描述代码。尝试在课程文件中打开相关视图
Erez A. Korn

1
是的,我可以验证是否从Eclipse插件中的Java文件自动创建了类图。
HRJ 2013年

1
我尝试了此操作,但是如果您的PlantUML代码变得太复杂,则您将花费​​所有时间来弄清楚为什么图形无法正确呈现并出现毛刺。仅对小型图有利。
trusktr

在Intellij中,将PlantUML与Sketch It相结合!graphviz可以从代码生成类图。当小图最大时,PNG效果最佳。
梅利莎(Melissa Loos),

6

我开发了一个maven插件,既可以从CLI运行作为插件目标,也可以作为依赖项导入,并以编程方式使用解析器,@see Main#main()以获取有关如何实现的想法。

递归地呈现所需软件包的PlantUML src代码,您可以根据需要手动进行编辑(希望您不会)。然后,通过将代码粘贴到plantUML页面中,或通过下载plant的jar,可以将UML图呈现为png图像。

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

输出图示例: 在此处输入图片说明

任何贡献都值​​得欢迎。它具有一组可自定义输出的过滤器,但我尚未在插件CLI参数中公开这些过滤器。

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

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


4

我会推荐Omondo的EclipseUML作为一般用法,尽管几个月前我的Web项目确实遇到了一些问题。他们在某个时间点有一个免费版本,但是据说不再推广了。

如果您真的热衷于从源代码进行逆向工程序列图,我建议您使用jTracert

就Eclipse项目本身而言,Eclipse UML2 Tools项目可能支持逆向工程,尽管我从未在实践中见过它的用途。

MoDisco(模型发现)项目的Eclipse项目GMT似乎是在实现自己的目标更清晰。该技术的具体工具清单将是开始的好地方。


尚未在UML2 Tools中找到反向工程功能;(
OneWorld 2010年

2
jTracert现在已停产。名为jSonde的新工具jTracert的继任者现已获得GPL v3的许可。 jsonde.com
高山

Omondo是最适合Java的。真正干净的集成,模型和代码之间没有混杂。精湛,但太贵了。我们仅被允许购买一个许可证,但由于安全性基于用户名登录,因此我们有20多个建模者在使用它。这意味着,如果10个用户具有相同的登录名,则他们所有人都可以使用该登录名。我们得到了一个执照,管理员的用户名:-)
UML GURU

jSonde上面显示的网址是不可用的。您可以在Github中找到网站和源代码:github.com/bedrin/jsonde
Jaime's

3

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


2
绿色似乎有潜力。但是,在我的工作中,我们有一个约700个班级的项目,经过一段时间的磨合后消失了。
Appak'2

3

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

我尝试了几种UML建模器来进行日食,对它们不满意。它们要么不稳定,要么复杂,要么只是丑陋。;-)


只是想提一下,我也使用过Netbeans UML建模器,在我相对简单的案例中也没有遇到问题。UI不太直观,但是完全可以。建模者还具有一些高级功能,例如,如果我没记错的话,会在模型外创建JPA实体代码。
Tuukka Mustonen 2010年

1
不幸的是,似乎不再支持UML插件。一个插件的重写显然正在进行,但因为他们放弃了旧插件完成重写之前不会帮助任何人。
2012年

这真是令人um目结舌:-(希望重写不会花费太长时间:-)
Patrick Cornelissen 2012年

1
NetBeans的UML由副总裁制作。他们不再这样做了,只有VP UML现在可用,而其免费版本很弱。
Gangnus

2

使用IntelliJ IDEA。要生成类图,请选择包并按Ctrl+ Alt+ U在此处输入图片说明

默认情况下,它仅显示类名,而不显示所有依赖项。要更改它:右键单击->显示类别...,然后显示依赖项: 在此处输入图片说明

要使用依赖关系图(UML部署图)并使用maven,请转到视图->工具窗口-> Maven项目,然后按Ctrl+ Alt+ U在此处输入图片说明

结果: 在此处输入图片说明

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


2

您可以使用EclipseUM的EclipseUM 30天评估版(适用于Eclipse 3.5):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

实时Flash演示:http//www.ejb3.org/reverse.swf

EclipseUML Omondo是世界上针对Java的最佳工具。在这个实时的Java同步市场上,似乎只有eUML与它竞争,但是eUML在代码中添加了模型标签,这确实非常非常糟糕,对我来说绝对是个难题。



0

我建议PlantUML。该工具非常有用且易于使用。PlantUML有一个Netbeans插件,您可以从Java代码创建UML图。

您可以通过以下方法在Netbeans中安装PlantUML插件:

Netbeans菜单->工具->插件

现在选择可用插件,然后找到PlantUML并安装它。

有关更多信息,请访问网站:www.plantuml.com



0

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

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

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

图表浏览器

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

选择要可视化的Java类

基础技术基于PlantUML,这意味着您可以使用其他PlantUML标记来完善图表。


0

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

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

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

控制流程图

  • UML顺序图方法java.net.AbstractPlainSocketImpl.getInputStream

UML序列图

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.