如何从现有的Java代码生成UML图(特别是序列图)?
当前回答
使用IntelliJ IDEA。要生成类图,选择package并按Ctrl + Alt + U:
默认情况下,它只显示类名,而不显示所有依赖项。要更改它:右键单击->显示类别…和显示依赖项:
要生成依赖关系图(UML部署图),使用maven go View -> Tool Windows -> maven Projects,并按Ctrl + Alt + U:
结果:
此外,还可以生成更多其他图表。见文档。
其他回答
有一个名为binarydoc的免费工具,它可以从Java方法的字节码(而不是源代码)生成UML序列图或控制流图(CFG)。
下面是为java方法java.net.AbstractPlainSocketImpl.getInputStream生成的示例图binarydoc:
方法控制流图:
方法的UML序列图:
编辑: 如果你是一个设计师,那么Papyrus是你最好的选择,它非常先进,功能齐全,但如果你只是想绘制一些UML图和易于安装,那么ObjectAid是非常酷的,它不需要任何插件,我只是在Eclipse-Java EE上安装了它,工作得很好!
2013年10月11日更新
我最初的帖子是在2012年6月发布的,很多事情都发生了变化,许多工具已经发展起来,而其他工具没有。因为我要回去做一些建模,也得到一些回复,我决定再次安装papyrus,并将再次研究其他可能的UML建模解决方案。UML生成(带有同步特性)对软件设计人员来说并不重要,对普通开发人员来说却很重要。
我希望papyrus有直接的方法将类逆向工程到UML类图,如果逆向工程有同步功能,那将是超级酷的,但不幸的是,papyrus项目充满了功能,我认为开发人员已经有了很多,因为你在papyrus上做的许多操作可能不会给你任何响应,只是什么都没有发生,但这已经超出了这个问题的范围。
答案(2013年10月11日)
工具
下载纸莎草 去帮助->安装新软件… 在Work with:下拉菜单中,选择—All Available Sites— 在过滤器中,输入Papyrus 安装完成后重新启动Eclipse 重复步骤1-3,这一次,安装Modisco
步骤
In your java project (assume it's called MyProject) create a folder e.g UML Right click over the project name -> Discovery -> Discoverer -> Discover Java and inventory model from java project, a file called MyProject_kdm.xmi will be generated. Right click project name file --> new --> papyrus model -> and call it MyProject. Move the three generated files MyProject.di , MyProject.notation, MyProject.uml to the UML folder Right click on MyProject_kdm.xmi -> Discovery -> Discoverer -> Discover UML model from KDM code again you'll get a property dialog set the serialization prop to TRUE to generate a file named MyProject.uml Move generated MyProject.uml which was generated at root, to UML folder, Eclipse will ask you If you wanted to replace it click yes. What we did in here was that we replaced an empty model with a generated one. ALT+W -> show view -> papyrus -> model explorer In that view, you'll find your classes like in the picture In the view Right click root model -> New diagram Then start grabbing classes to the diagram from the view
一些功能
To show the class elements (variables, functions etc) Right click on any class -> Filters -> show/hide contents Voila !! You can have default friendly color settings from Window -> pereferences -> papyrus -> class diagram one very important setting is Arrange when you drop the classes they get a cramped right click on any empty space at a class diagram and click Arrange All Arrows in the model explorer view can be grabbed to the diagram to show generalization, realization etc After all of that your settings will show diagrams like Synchronization isn't available as far as I know you'll need to manually import any new classes.
就是这样,除非你真的需要,否则不要购买商业产品,莎草纸实际上是很好的和复杂的,可以捐赠或其他东西。
免责声明:我和纸莎草人没有关系,事实上,我一开始并不喜欢纸莎草,直到我做了大量的研究,并耐心地体验了它。当我尝试其他免费工具时,我会再次回到这篇文章。
您可以使用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在代码中添加了模型标签,这真的非常非常糟糕,对我来说是一个绝对的失败。
PlantUML怎么样? 这不是逆向工程!!这是在编码之前的工程设计。
到目前为止,我用过的最好的逆向工程工具和往返java -> UML是Borland's Together。它是基于Eclipse的(不仅仅是一个插件),而且工作得非常好。
推荐文章
- 使用Jackson将JSON字符串转换为漂亮的打印JSON输出
- Android - SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
- Javadoc @see或{@link}?
- 在准备语句中使用“like”通配符
- Android Eclipse -无法找到*.apk
- javac和Eclipse编译器之间的区别是什么?
- 工厂模式和策略模式之间的区别是什么?
- 在Java中使用正则表达式提取值
- 如何允许所有网络连接类型HTTP和HTTPS在Android(9)馅饼?
- Intellij IDEA Java类在保存时不能自动编译
- 何时使用Mockito.verify()?
- 在maven中安装mvn到底做什么
- 不可变与不可修改的集合
- 如何在JSON中使用杰克逊更改字段名
- GSON -日期格式