PlantUML 是一个开源项目,能够方便的绘制各种UML图形:
- 时序图
- 用例图
- 类图
- 活动图
- 组件图
- 状态图
- 对象图
PlantUML 使用一个非常简单直观的语言来定义图形, 每个定义均包含在 @startuml 和 @enduml。
时序图
时序图中,使用 -> 绘制参与者之间的消息。例如:
@startuml
Alice -> Proxy: SIP MESSAGE 1
Proxy --> Bob: SIP MESSAGE 2
Proxy <- Bob: 200 OK 1
Alice <-- Proxy: 200 OK 2
@endumlPlantUML 绘制的结果如图:

为了可读性更好,PlantUML支持 <-。 对于 --> / <--, PlantUML会生成点线。
用例图
用例图中,使用 () 定义 用例, :: 定义 主角。例如:
@startuml
:用户: -> (查询)
:用户: -> (缴费)
:用户: -> (取款)
:用户: -> (转账)
@endumlPlantUML 绘制的结果如图:

类图
类图中,使用 <|-- 定义 继承, *-- 定义 组合, o-- 定义 聚合。例如:
@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
@endumlPlantUML 绘制的结果如图:

活动图
活动图中, 使用 "" 定义 活动, (*) 定义 起点 和 终点, --> 定义 箭头。例如:
@startuml
(*) --> "First Activity"
--> "Second Activity"
--> (*)
@endumlPlantUML 绘制的结果如图:

组件图
组件图中,使用 [] 定义 组件, () 定义 接口, 可以组合使用 .., --, -->。例如:
@startuml
() DataAccess - [First Component]
[First Component] --> HTTP
@endumlPlantUML 绘制的结果如图:

状态图
状态图中,直接使用 名称 定义 状态, [*] 定义 起点 和 终点, --> 定义 箭头。 例如
@startuml
[*] --> State1
State1 --> [*]
State1 -> State2
State2 --> [*]
@endumlPlantUML 绘制的结果如图:

对象图
对象图中,使用 object 关键字定义 对象,<|-- 定义 继承, *-- 定义 组合, o-- 定义 聚合。例如:
@startuml
object Object01
object Object02
object Object03
object Object04
object Object05
object Object06
Object01 <|-- Object02
Object03 *-- Object04
Object05 o-- Object06
@endumlPlantUML 绘制的结果如图:

在Jekyll中使用PlantUML
Jekyll 提供插件支持,可以通过插件的方式在Jekyll中使用PlantUML。具体方法参看 这里。
注意, 这种方式只能在本地使用,无法在Github上使用。
在org-mode中使用PlantUML
Emacs的org-mode提供对PlantUML的支持。 配置如下:
(org-babel-do-load-languages
'org-babel-load-languages
'((plantuml . t)
))
(setq org-confirm-babel-evaluate nil)
(setq org-plantuml-jar-path (expand-file-name "/path/to/plantuml.jar"))通过上述配置,在 .org 文件中,输入:
#+BEGIN_SRC plantuml :file /path/to/result.png :cmdline -charset UTF-8
Alice -> Proxy: SIP MESSAGE 1
Proxy --> Bob: SIP MESSAGE 2
Proxy <- Bob: 200 OK 1
Alice <-- Proxy: 200 OK 2
#+END_SRC按下 C-c C-c 便可生成UML图形。
注意
PlantUML的功能远不止上述介绍的这些,这里抛砖引玉,更多更详细的介绍参看 这里。