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

时间:2008-09-09 12:56:05

标签: java uml reverse-engineering diagram

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

16 个答案:

答案 0 :(得分:250)

ObjectAid UML Explorer

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

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

并生成相当不错的UML图表:

Screenshot

网站描述:

  

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

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

答案 1 :(得分:63)

编辑: 如果你是一名设计师,那么Papyrus是你最好的选择它非常先进且功能齐全,但是如果你只是想要勾勒出一些UML图并且安装简单,那么ObjectAid非常酷,它不会我只需要在Eclipse-Java EE上安装它的任何插件,效果很好!


2013年10月11日更新

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

我希望papyrus能够直接将逆向工程类转换为UML类图,如果逆向工程具有同步功能,那将是非常酷的,但不幸的是,papyrus项目充满了功能,我认为那里的开发人员已经掌握了很多东西。因为你对纸莎草的许多行动可能都没有给你任何回应,只是没有任何反应,但不管怎样,这都超出了这个问题范围。

答案(2013年10月11日)

工具

  1. 下载Papyrus
  2. 转到帮助 - >安装新软件......
  3. 使用:下拉列表中,选择 - 所有可用网站 -
  4. 在过滤器中,输入 Papyrus
  5. 安装完成后重新启动Eclipse
  6. 重复步骤1-3,这次安装 Modisco
  7. <强>步骤

    1. 在您的java项目中(假设它名为MyProject)创建一个文件夹,例如UML
    2. 右键点击项目名称 - &gt;发现 - &gt; Discoverer - &gt;从java项目中发现Java和库存模型,将生成一个名为MyProject_kdm.xmi的文件。 enter image description here
    3. 右键单击项目名称文件 - &gt;新的 - &gt;纸莎草模型 - &gt;并称之为MyProject。
    4. 将三个生成的文件MyProject.di,MyProject.notation,MyProject.uml移动到UML文件夹
    5. 右键单击MyProject_kdm.xmi - &gt;发现 - &gt; Discoverer - &gt;再次从KDM代码中发现UML模型,您将获得一个属性对话框,将序列化道具设置为TRUE以生成名为MyProject.uml的文件 enter image description here

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

    7. ALT + W - &gt;显示视图 - &gt;纸莎草纸 - &gt;模特探险家

    8. 在该视图中,您可以在图片中找到您的课程 enter image description here

    9. 在视图中右键单击根模型 - &gt;新图enter image description here

    10. 然后从视图

    11. 开始抓取图表中的类

      某些功能

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

      • 您可以使用Window中的默认友好颜色设置 - &gt; pereferences - &gt;纸莎草纸 - &gt;类图

      • 一个非常重要的设置是安排,当您放弃类时,他们会在一个类图中右键单击任何空白区域并单击“全部安排”

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

      • 完成所有这些后,您的设置将显示如下图表 enter image description here

      • 据我所知,您需要手动导入任何新课程,因此无法进行同步。

      这就是全部,除非你真的需要,否则不要购买商品,纸莎草实际上是伟大而复杂的,而不是捐赠或其他东西。

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

答案 2 :(得分:42)

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

alt text

  

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

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

  •   
  • 高级逆向工程

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

答案 3 :(得分:8)

PlantUML怎么样? 它不适用于逆向工程!在编码之前,它是用于工程的。

答案 4 :(得分:5)

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

以递归方式呈现所需包的PlantUML src代码,您可以根据需要手动编辑(希望您赢了)。然后,通过粘贴plantUML页面中的代码,或者通过下载工厂的jar,您可以将UML图表渲染为png图像。

请在此处查看https://github.com/juanmf/Java2PlantUML

示例输出图: enter image description here

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

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

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

答案 5 :(得分:4)

我建议EclipseUML from Omondo用于一般用法,尽管几个月前我的网络项目确实遇到了一些问题。他们在某个时间点有一个免费版本,但据说不再推广。

如果您真的热衷于源代码中的逆向工程序列图,我建议jTracert

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

MoDisco(模型发现)项目Eclipse GMT项目似乎更清楚地实现了您的目标。 list of technology specific tools将是一个很好的开始。

答案 6 :(得分:3)

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

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

答案 7 :(得分:3)

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

答案 8 :(得分:2)

您可以使用EclipseUML for Eclipse 3.5的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

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

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

答案 9 :(得分:2)

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

默认情况下,它仅显示类名,而不显示所有依赖项。要更改它:右键单击 - &gt;显示类别...和显示依赖项: enter image description here

要创建依赖关系图(UML部署图)并使用maven go View - &gt;工具Windows - &gt; Maven项目并按 Ctrl + Alt + U enter image description here

结果: enter image description here

还可以生成更多其他图表。请参阅documentation

答案 10 :(得分:2)

http://www.zenuml.com不直接从Java代码生成UML图,但其DSL类似于Java。顺便说一句,我创建了zenuml:)enter image description here

答案 11 :(得分:1)

有人提出了非常类似的问题before

到目前为止,我用于逆向工程和圆形跳闸的最佳工具java - &gt; UML是Borland's Together。它基于Eclipse(不仅仅是一个插件),而且效果很好。

答案 12 :(得分:0)

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

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

Netbeans菜单 - &gt;工具 - &gt;插件

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

欲了解更多信息,请访问网站:www.plantuml.com

答案 13 :(得分:0)

http://uml-plugins.blogspot.com/,在这里我们可以找到UML建模工具之间的差异,以便快速入门! 除此之外,我还注意到Intellij的SequenceDiagram插件也是一个不错的选择。请阅读该帖子,以快速了解免费与商业以及最佳选择。

答案 14 :(得分:0)

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

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

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

diagram browser

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

select the java classes you want to visualise

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

答案 15 :(得分:0)

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

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

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

Control Flow Graph

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

UML Sequence Diagram