PlantUML

2025/10/29

# PlantUML 概述

PlantUML‌是一款开源的UML图绘制工具,支持通过文本来生成图形,使用起来非常高效。它支持多种类型的UML图,包括时序图、类图、对象图、活动图、组件图、部署图、状态图等‌。

https://pdf.plantuml.net/1.2020.22/PlantUML_Language_Reference_Guide_en.pdf (opens new window)

https://plantuml.com/zh/ (opens new window)

https://plantuml.com/zh/class-diagram (opens new window)

# PlantUML 插件

IDEA 社区版安装 PlantUML 插件步骤:

  1. 打开 IDEA,通过顶部菜单栏依次点击 ‌File‌ → ‌Settings‌ (或使用快捷键 Ctrl + Alt + S) 打开设置界面。
  2. 在左侧面板中找到并点击 ‌Plugins‌,然后在右侧切换到 ‌Marketplace‌ 选项卡。
  3. 在搜索框中输入 "‌PlantUML integration‌",从搜索结果中找到该插件并点击其右侧的 ‌Install‌ 按钮进行安装。
  4. 安装完成后,根据提示‌重启 IDEA‌ 以激活插件。

# PlantUML 类图

# 访问修饰符

字符 图标(属性) 图标(方法) 可访问性
- img img private 私有
# img img protected 受保护
~ img img package private 包内可见
+ img img public 公有

# 元素声明

在PlantUML中,元素声明主要通过特定的语法规则来定义类、接口、枚举等UML组件及其属性和方法。

类的基本声明格式‌如下:

class 类名 {
  访问修饰符 属性名称: 属性类型 = 默认值
  访问修饰符 方法名称(参数列表): 返回类型
}
1
2
3
4

参数列表由一个或多个参数构成,多个参数‌之间用逗号分隔。

方法参数声明语法:

参数方向 参数名称: 参数类型
1

参数方向‌可以通过特定前缀来指定:

  • in - 输入参数(默认,通常省略)
  • out - 输出参数
  • inout - 输入输出参数

在PlantUML中声明静态方法,需要在方法名前添加 {static} 修饰符。

访问修饰符 {static} 方法名称(参数列表): 返回类型
1

在PlantUML中声明抽象方法,需要在方法名前添加 {abstract} 修饰符。

访问修饰符 {abstract} 方法名称(参数列表): 返回类型
1

抽象类‌使用 abstract 关键字:

abstract class 抽象类名 {
  // 属性和方法
}
1
2
3

接口‌使用 interface 关键字:

interface 接口名 {
  // 属性和方法
}
1
2
3

枚举‌使用 enum 关键字:

enum 枚举名 {
  值1
  值2
  值3
}
1
2
3
4
5

# 类之间的关系

类之间的关系是用以下符号定义的。

类型 符号 说明
继承关系(泛化/扩展) <|----|> 空心三角形箭头指向父类
is-a关系,子类继承父类的特性和行为
实现 <|....|> 虚线空心三角形箭头指向接口
类实现接口定义的契约
组合 *-- 实心菱形指向整体
强拥有关系,部分对象的生命周期严格依赖整体对象,整体消失则部分必然消失(如“树”与“树叶”)‌。
聚合 o-- 空心菱形指向整体
弱拥有关系,部分对象可独立于整体存在,整体消失不影响部分(如“班级”与“学生”)‌。
关联 --> 实线箭头指向被关联的类
has-a关系,长期性的结构关系
关联关系表示类之间的结构化连接,耦合度较强。关联关系在代码中通常通过成员变量来实现,这种关系使得一个类能够知道另一个类的属性和方法。关联可以是单向的或双向的,具有相对稳定的特性。
依赖 ..> 虚线箭头指向被依赖的类
use-a关系,临时性的使用关系
依赖关系描述的是一种使用关系,耦合度较弱。依赖关系在代码中通常表现为局部变量、方法的参数、返回值或对静态方法的调用。依赖关系是临时的,仅在方法执行期间存在。

可以用.. 来代替-- ,会显示为虚线。

# PlantUML 时序图

# 参与者定义‌

participantactor 声明对象,如 participant Aactor User

支持多种类型:boundary(边界)、control(控制)、entity(实体)、database(数据库)等

# 消息传递‌

使用 -> 表示同步消息,--> 表示异步返回

示例:A -> B : 请求 或 B --> A : 响应。

# 生命线控制‌

activatedeactivate 标记对象活跃状态

A -> B : 消息
activate B
B --> A : 响应
deactivate B
1
2
3
4

# 注释信息

可以使用note leftnote right 关键字在信息后面加上注释。

可以使用end note 关键字有一个多行注释。

可以使用note left ofnote right ofnote over在节点(participant)的相对位置放置注释。

@startuml
Alice->Bob : hello
note left: this is a first note

Bob->Alice : ok
note right: this is another note

Bob->Bob : I am thinking
note left
a note
can also be defined
on several lines
end note

note left of Alice #aqua
This is displayed
left of Alice.
end note

note right of Alice: This is displayed right of Alice.

note over Alice: This is displayed over Alice.

note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.

note over Bob, Alice
This is yet another
example of
a long note.
end note
@enduml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# PlantUML 导出大图

PlantUML导出大图被截取和乱码解决方案:

https://github.com/plantuml/plantuml/releases (opens new window)下载plantuml.jar,执行以下命令

java -DPLANTUML_LIMIT_SIZE=8192 -jar /path/to/plantuml.jar -charset UTF-8 /path/to/example.puml
1

参数说明:

  • -DPLANTUML_LIMIT_SIZE参数用于设置图像的宽高。如果图像很大,需要设置-Xml1024m参数。
  • -charset UTF-8参数用于设定导出图像的编码。