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

450

我如何从现有的Java代码生成UML图(特别是序列图)?


4
这很不可能发生。真正的Java代码并不像UML图表那样被组织成漂亮的形式。 - Stephan Eggermont
2
这么多答案都没有涉及到时序图。哼。 - Bill K
@BillK 我的回答确实涉及到了序列图。这是一个Intellij Idea插件 - https://dev59.com/nXVD5IYBdhLWcg3wNYxZ#45239269。 - Devs love ZenUML
2
这个问题更适合在姊妹站点Software Recommendations Stack Exchange上询问。 - Basil Bourque
Java设计模式书籍PDF格式 - Nasreen Ustad
显示剩余2条评论
16个回答

261

ObjectAid UML Explorer

我使用的是ObjectAid UML Explorer。这个工具很容易地从仓库安装

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

并且产生了相当好的UML图表:

屏幕截图

来自网站的描述:

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

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

4
在此创建账户:https://www.objectaid.com/login (10分钟内会发送激活邮件)。点击Diagram Add-On,许可证将会发送到您的电子邮件中。按照http://www.objectaid.com/installation 的步骤安装ObjectAid,然后从http://download.eclipse.org/tools/gef/updates/releases/ 安装GEF。 现在将许可证从电子邮件中复制并粘贴到Window->Preferences->ObjectAid。如何创建图表?请参考http://www.objectaid.com/class-diagram。 - rluks
无法在Eclipse Juno中安装。安装项目时发生错误 会话上下文为:(配置文件=epp.package.java,阶段=org.eclipse.equinox.internal.p2.engine.phases.Install,操作数=null --> [R]com.objectaid.uml 1.1.3,操作=)。 准备部分IU失败:[R]com.objectaid.uml 1.1.3。 - Gunaseelan
类之间的关联怎么样?这个插件能做到吗?如果可以,怎么做? - Muhammed Refaat
链接不是给你的浏览器用的,而是用来复制到eclipse中的。 - Thomas Ahle
1
ObjectAid的商业版在生成序列图方面比免费版表现更好,免费版只能用于生成类图!! - whoami - fakeFaceTrueSoul
显示剩余4条评论

64

编辑: 如果您是设计师,则Papyrus是您的最佳选择,它非常先进并且功能齐全,但如果您只想绘制一些UML图并进行简单安装,则ObjectAid相当不错,并且不需要任何插件。我刚刚在Eclipse-Java EE上安装了它,效果很棒!


更新于2013年10月11日

我的原始帖子是在2012年6月,许多事情已经发生了变化,许多工具已经成长,而其他工具则没有。由于我要回去做一些建模,并且也收到了一些帖子的回复,我决定再次安装papyrus,并将调查其他可能的UML建模解决方案。 UML生成(具有同步功能)对于软件设计师来说真的很重要,但对于普通开发人员也是如此。

我希望Papyrus有一种直接的方法可以将类反向工程为UML类图,如果该反向工程具有同步功能,那将会非常酷,但不幸的是,Papyrus项目充满了功能,我认为那里的开发人员已经非常忙碌,因为在Papyrus上执行的许多操作可能不会给您任何响应,并且什么也不会发生,但这超出了此问题的范围。

答案(2013年10月11日)

工具

  1. 下载Papyrus
  2. 转到 帮助 -> 安装新软件...
  3. 在“Work with:”下拉菜单中选择“--All Available Sites--”
  4. 在过滤器中键入“Papyrus”
  5. 安装完成后重新启动Eclipse
  6. 重复步骤1-3,这次安装Modisco

步骤

  1. 在您的java项目中(假设它称为MyProject)创建一个文件夹,例如UML
  2. 右键单击项目名称->Discovery->Discoverer->Discover Java并从java项目中进行清单模型,将生成一个名为MyProject_kdm.xmi的文件。
  3. 进入图像描述
  4. 右键单击项目名称文件 --> 新建 --> Papyrus模型 -> 并将其命名为MyProject。
  5. 移动三个生成的文件MyProject.di、MyProject.notation和MyProject.uml到UML文件夹中。
  6. 右键单击MyProject_kdm.xmi -> 发现 -> 发现器 -> 从KDM代码发现UML模型,再次得到一个属性对话框,将序列化属性设置为TRUE以生成一个名为MyProject.uml的文件。 进入图像描述

  7. 将生成的MyProject.uml文件移动到根目录下,在Eclipse中会询问您是否要替换它,请单击“Yes”。我们在这里所做的是用生成的模型替换空模型。

  8. ALT+W -> 显示视图 -> Papyrus -> 模型资源管理器

  9. 在该视图中,您会找到类似于图片中的类 进入图像描述

  10. 在该视图中,右键单击根模型 -> 新建图表 进入图像描述

  11. 然后从视图中开始将类拖到图表中

一些功能

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

  • 您可以从窗口 -> 首选项 -> Papyrus -> 类图中获得默认友好的颜色设置

  • 一个非常重要的设置是 排列 当您放置类时,它们会变得拥挤,右键单击类图上的任何空白处,然后单击“排列所有”

  • 模型资源管理器视图中的箭头可以被拖到图表中以显示推广、实现等

  • 完成所有设置后,您将看到类似于以下图片的图表: 进入图像描述

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

    就这些了,除非您真的需要,否则不要购买商业产品,Papyrus实际上非常出色和复杂,最好捐赠一些资金支持他们。

    免责声明:我与Papyrus团队没有任何关系,事实上,起初我并不喜欢Papyrus,直到我进行了大量研究并耐心地体验才改变了想法。如果我尝试其他免费工具,我会再次回到这篇文章。


我在Eclipse中搜索了Modisco,但是它显示为0可安装项。这个项目还活着吗?还是被撤下了?它变成付费工具了吗?没有这个工具Papyrus就不能运行吗? - R-JANA
使用了STS但是没有成功。 - R-JANA
@R-JANA,我不知道Modisco的当前状态如何,但我会尽快回到这篇文章,因为我即将安装papyrus并需要更新它。我建议你自己尝试安装papyrus,并考虑我的当前帖子;我认为自从我发布这个答案以来发生了很多变化。 - Ismail Marmoush
Papyrus有一个可选插件,可以添加Java反向工程功能:http://wiki.eclipse.org/Java_reverse_engineering。使用它,从源代码中添加图表元素会更加容易,甚至可以将类拖入图表中。 - Markus Ende

42

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

alt text

eUML2 for Java 是一个在 Eclipse 中为 Java 开发者设计的强大 UML 建模工具。免费版本可用于商业用途。它支持以下功能:

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

  • 高级反向工程

  • 强大的真实依赖性分析工具
  • UML Profile 和 MDD
  • 数据库工具
  • 可自定义的模板支持

20
这个工具很难安装。我尝试了大约半个小时都没有成功。还有其他建议吗? - Jonathan
2
我在我的更新管理器中找不到eUML2,而且我不想为了这个功能打包一个新的Eclipse设置。我正在使用Eclipse“Helios”,并按照以下方式操作:帮助-安装新软件-Helios http://download.eclipse.org/releases/helios-建模 - OneWorld
3
我知道这是一篇旧帖子,但安装eUML2的大多数问题似乎已经解决了。 - Andy
7
eUML真的很糟糕。它改变了我的代码格式并在各处添加标记。我的代码现在变得如此混乱,以至于我更喜欢撤消这个更改。问题是没有撤销功能,你的代码将永久被更改。我建议在使用eUML之前备份您的项目,以防万一。 - UML GURU
33
你听说过版本控制吗? - devoured elysium
显示剩余8条评论

12

1
@hc_dev,感谢您的提醒。已添加该注释。 - Devs love ZenUML

7

那么,PlantUML 怎么样呢?它并不是用于逆向工程!而是用于在编写代码之前进行工程设计。


6
未回答问题,该问题明确要求逆向工程工具。 - jmite
1
我不确定那完全正确。PlantUML也能用图表描述代码。尝试在类文件中打开相关视图。 - Erez A. Korn
2
是的,我可以确认在Eclipse插件中,类图是从Java文件自动创建的。 - HRJ
1
我尝试过这个,但如果你的PlantUML代码变得太复杂,你会花费大量时间来弄清楚为什么绘图无法正确呈现并出现故障。它只适用于小型图表。 - trusktr

7
我开发了一个Maven插件,可以作为插件目标从CLI运行,或者作为依赖项导入并编程性地使用解析器@see Main#main()(如何操作)。它递归地渲染所需包的PlantUML源代码,如果需要,您可以手动编辑它们(希望您不需要)。然后,通过将代码粘贴到PlantUML页面上,或者下载植物的jar文件,您可以将UML图表呈现为png图像。在这里查看 https://github.com/juanmf/Java2PlantUML
示例输出图表: enter image description here 欢迎任何贡献。它有一组过滤器来自定义输出,但我还没有在插件CLI参数中公开它们。
重要的是要注意,它不仅限于您的*.java文件,还可以呈现来自maven依赖项的UML图。这非常方便,可以理解您所依赖的库。它实际上使用反射检查已编译的类,因此不需要源代码。

成为GitHub上的第一个点赞者:P


4
我建议使用Omondo的EclipseUML进行一般用途,尽管我在几个月前遇到了一些问题,与我的Web项目有关。他们曾经有一个免费版,但据说现在不再推广。
如果你真的很想从源代码中反向工程序列图,我建议使用jTracert
就Eclipse项目本身而言,Eclipse UML2 Tools项目可能支持反向工程,尽管我从未见过它的实际使用。 MoDisco(Model Discovery)项目Eclipse GMT项目似乎更清晰地实现了您的目标。技术特定工具列表将是一个好的起点。

在UML2工具中没有找到反向工程功能 ;( - OneWorld
2
jTracert现已停止更新。jTracert的继任者,名为jSonde的新工具现在已经获得GPL v3许可。http://www.jsonde.com/ - Alpine
Omondo是最适合Java的工具。它的集成非常干净,模型和代码之间没有混淆。它非常出色,但价格太贵了。我们只被允许购买一个许可证,但有超过20个建模者在使用它,因为安全性基于用户名登录。这意味着如果10个用户具有相同的登录名,则所有这些用户都可以使用它。我们使用Admin用户名获得了许可证 :-) - UML GURU
jSonde在上面显示的URL中不可用。您可以在以下网站和Github中找到源代码:https://bedrin.github.io/jsonde/,https://github.com/bedrin/jsonde。 - Jaime

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

2
绿色似乎有潜力。然而,在我的工作中,我们有一个拥有约700个类的项目,它会有点卡顿,然后就死了。 - Appak

3
使用IntelliJ IDEA。要生成类图,选择包并按Ctrl+Alt+Uenter image description here 默认情况下,它仅显示类名而不是所有依赖项。要更改它:右键单击->显示类别...和显示依赖项:enter image description here 要生成依赖关系图(UML部署图),如果您使用maven,可以在“视图” ->“工具窗口” ->“Maven项目”中按Ctrl+Alt+Uenter image description here 结果为:enter image description here 也可以生成其他类型的图表。请参阅文档

SequenceDiagram插件适用于IntelliJ Idea(已在社区版上测试),非常有效。感谢此问题中的@dean-jain。 - codester

3
你也可以尝试使用NetBeans的UML建模工具。我曾经用它来生成Java代码并在我的Eclipse项目中使用。你甚至可以将Eclipse项目导入到NetBeans中,并保持Eclipse设置与NetBeans项目设置同步。
我尝试过多个Eclipse UML建模工具,但都不满意。它们要么不稳定,要么太复杂,要么就是太丑陋了。;-)

只是想提一下,我也使用过Netbeans的UML建模工具,在我的相对简单的案例中没有遇到问题。用户界面(UI)不太直观,但完全没问题。如果我没记错的话,该建模工具还具有一些高级功能,比如根据模型创建JPA实体代码。 - Tuukka Mustonen
1
不幸的是,UML插件似乎不再受支持。插件的重写正在进行中,但这并没有帮助任何人,因为他们在重写完成之前就放弃了旧插件。 - Appak
真遗憾 :-( 希望重写不会太久 :-) - Patrick Cornelissen
1
NetBeans的UML曾由VP制作,但他们不再继续开发了,现在只有他们的VP UML可用,而且只提供弱化的免费版本。 - Gangnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接