一、前言

PlantUML是软件开发过程中的一种常用文本绘图工具,其使用纯文本定义图形结构,并依此绘制对应的图形。在绘制PlantUML的过程中,无需拖拽图形组件、手动维护组件之间的连接关系。

PlantUML支持绘制所有的UML图,如:序列图、用例图、活动图等,也支持绘制部分常用的非UML图,如:思维导图、实体关系图等。

二、PlantUML的基本使用

PlantUML可以使用多种方式完成绘图:

  1. 使用PlantUML Server:PlantUML官方提供了便捷的Online Server,离线环境下也可以在本地安装PlantUML Serverdocker run -d -p 8080:8080 plantuml/plantuml-server:jetty,详见官网

  2. 使用VSCode或IDEA的PlantUML插件:在VSCode或IDEA的插件市场搜索PlantUML,安装并使用对应插件完成PlantUML绘图。

  3. 使用Java代码绘制PlantUML:PlantUML是基于Java开发的,其提供了plantuml.jar包,可以直接在Java中调用PlantUML组件实现绘图。详见后文

三、使用Java代码绘制PlantUML

使用Java代码绘制PlantUML可以在自动化生成图形等场景发挥作用,如:动态分析Java代码结构并生成调用关系图。

pom.xml中引入plantuml包:

<dependency>
    <groupId>net.sourceforge.plantuml</groupId>
    <artifactId>plantuml</artifactId>
    <version>1.2023.12</version>
</dependency>

新增PlantUmlRenderer类:

import net.sourceforge.plantuml.SourceStringReader;

import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

public class PlantUmlRenderer {
    public void render(String source, String filename) {
        System.out.println("PlantUML源码:" + source);
        SourceStringReader reader = new SourceStringReader(source);
        try {
            OutputStream os = Files.newOutputStream(Paths.get(filename));
            reader.outputImage(os);
        } catch (Exception e) {
            System.out.println("PlantUML渲染失败:" + e);
        }
    }
}

调用上述PlantUmlRenderer类的render方法:

import org.junit.Test;

public class PlantUmlRendererTest {
    private final PlantUmlRenderer plantUmlRenderer = new PlantUmlRenderer();

    @Test
    public void render() {
        plantUmlRenderer.render(genSource(), "PlantUML.png");
    }

    private String genSource() {
        return "@startuml\n" +
                "Tom -> Jerry : hello\n" +
                "@enduml";
    }
}

执行单元测试,在根目录查看生成的PlantUML.png文件,如下所示:

@startuml
Tom -> Jerry : hello
@enduml

参考文档

  1. PlantUML官网