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

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

415669 次浏览

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

alt text

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

  • CVS和团队支持
  • 专为大型项目与多个和可定制的模型视图
  • 赫利俄斯的
  • 实时代码/模型同步
  • UML2.1兼容并支持OMG XMI
  • JDK 1.4和1.5支持
  • 商业版提供:

  • 高级逆向工程

  • 强大的真正依赖分析工具
  • UML概要和MDD
  • 数据库工具
  • 可定制的模板支持

到目前为止,我用过的最好的逆向工程工具和往返java -> UML是宝蓝的在一起。它是基于Eclipse的(不仅仅是一个插件),而且工作得非常好。

我建议一般使用来自Omondo的EclipseUML,尽管几个月前我的web项目确实遇到了一些问题。他们曾经有过一个免费版本,但据说已经不再推广了。

如果你真的热衷于从源代码逆向工程序列图,我会推荐jTracert

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

MoDisco(模型发现)项目Eclipse GMT项目似乎更清楚地实现了您的目标。特定于技术的工具列表将是一个很好的开始。

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

我尝试了几个用于eclipse的UML建模器,但都不满意。它们要么不稳定,要么复杂,要么丑陋不堪。: -)

PlantUML怎么样? 这不是逆向工程!!

您可以使用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

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

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

我发现绿色插件使用起来非常简单,可以从源代码生成类图。 试一试吧。 只需复制插件到插件目录

ObjectAid UML Explorer

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

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

并生成相当不错的UML图:

截图

网站描述:

ObjectAid UML资源管理器不同于其他UML工具。它使用 UML符号,以显示现有代码的图形表示 这与您的文本编辑器一样准确和最新,同时 非常容易使用。

  • 您的源代码和库是显示的模型,它们不是反向工程成不同的格式。
  • 如果您在Eclipse中更新代码,您的图也会更新;没有必要对源代码进行反向工程。
  • 重构更新您的图表以及您的源代码。当您重命名字段或移动类时,您的图只是反映
  • Eclipse工作区中的所有关系图都会根据需要进行重构。如有必要,他们被签出您的 版本控制系统。 图表完全集成到Eclipse IDE中。您可以将Java类从任何其他视图拖到图上,并与图相关 如果适用,信息将显示在其他视图中
< p >编辑: 如果你是一名设计师,那么纸莎草纸是你的最佳选择,它非常高级,功能丰富,但如果你只是想绘制一些UML图和易于安装,那么ObjectAid是非常酷的,它不需要任何插件,我刚刚在Eclipse-Java EE上安装了它,工作很棒

2013年10月11日更新

我最初的帖子是在2012年6月发布的,很多事情都发生了变化,许多工具已经发展起来,而其他工具没有。因为我要回去做一些建模,也得到一些回复,我决定再次安装papyrus,并将再次研究其他可能的UML建模解决方案。UML生成(带有同步特性)对软件设计人员来说并不重要,对普通开发人员来说却很重要。

我希望papyrus有直接的方法将类逆向工程到UML类图,如果逆向工程有同步功能,那将是超级酷的,但不幸的是,papyrus项目充满了功能,我认为开发人员已经有了很多,因为你在papyrus上做的许多操作可能不会给你任何响应,只是什么都没有发生,但这已经超出了这个问题的范围。

这个问题的答案(2013年10月11日)

工具

  1. 下载纸莎草
  2. 去帮助->安装新软件…
  3. 处理:下拉菜单中,选择——所有可用站点——
  4. 在过滤器中,输入纸莎草纸
  5. 安装完成后重新启动Eclipse
  6. 重复步骤1-3,这一次安装Modisco

步骤

  1. 在你的java项目中(假设它叫MyProject)创建一个文件夹,例如UML
  2. 右键单击项目名称-> Discovery -> Discoverer ->从Java项目中发现Java和库存模型,一个名为MyProject_kdm的文件。将生成Xmi。 enter image description here
  3. 右键单击项目名称文件—> new—> papyrus model—>并将其命名为MyProject。
  4. 移动三个生成的文件MyProject。di, MyProject。符号,。。uml到uml文件夹
  5. 右键单击MyProject_kdm。再次从KDM代码中发现UML模型,您将得到一个属性对话框,将序列化道具设置为TRUE以生成一个名为MyProject.uml的文件 enter image description here

  6. Move生成MyProject。如果你想要替换它,Eclipse会问你,点击是。我们在这里所做的是用一个生成的模型替换一个空模型。

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

  8. 在那个视图中,你会发现你的类如图所示 enter image description here

  9. 在视图中右键单击根模型->新建图表enter image description here .

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

一些功能

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

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

  • 一个非常重要的设置是Arrange当你删除类时,它们会在类图的任何空白位置上右键单击,然后单击全部安排

  • 模型资源管理器视图中的箭头可以被抓取到图中以显示泛化、实现等

  • 之后,您的设置将显示如下图表 enter image description here

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

就是这样,除非你真的需要,否则不要购买商业产品,莎草纸实际上是很好的和复杂的,可以捐赠或其他东西。

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

我推荐PlantUML。这个工具非常有用,很容易使用。PlantUML有一个Netbeans插件,你可以用你的java代码创建UML图。

在netbeans中安装PlantUML插件的方法如下:

Netbeans菜单->工具->插件

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

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

我开发了一个Maven插件,可以从CLI运行作为插件目标,或者作为依赖项导入并以编程方式使用解析器,@see Main#main()来获得如何运行的想法。

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

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

输出图示例: enter image description here < / p >

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

值得注意的是,它并不局限于您的*.java文件,它也可以从maven依赖项中渲染UML图。这对于理解您所依赖的库非常方便。它实际上检查带有反射的已编译类,因此不需要源

成为第一个在GitHub上的明星:P

使用IntelliJ IDEA。要生成类图,选择package并按Ctrl + Alt + U:enter image description here

默认情况下,它只显示类名,不显示所有依赖项。要更改它:右键单击->显示类别…和显示依赖项: enter image description here < / p > 要生成依赖关系图(UML部署图),使用maven go View -> Tool Windows -> maven Projects,并按Ctrl + Alt + U: enter image description here < / p > < p >结果: enter image description here < / p >

此外,还可以生成更多其他图表。看到文档

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

在Intellij IDEA上,ZenUML可以从Java代码生成序列图。 enter image description here < / p >

https://plugins.jetbrains.com/plugin/12437-zenuml-support看看吧

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

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

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

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

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

diagram browser

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

select the java classes you want to visualise .

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

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

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

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

控制流程图

  • 方法java.net.AbstractPlainSocketImpl.getInputStreamUML序列图:

UML序列图