idea集成plantUML+C4-Model编写架构图

引言

  最近换了个地儿,笔记本也换了,工作需要画个架构图,一时间没啥画图工具可用(安装受限),倒腾着想借助IDEA插件plantUML来完成,想来这种编程式的画图一个显得专业,二个是基于代码式的复用性好,画不多说,踩坑开始~~~

环境搭建

主要涉及以下几个步骤:
  • 安装java()
  • 安装idea()
  • 安装plantUML插件
  • 安装graphviz工具
  • 集成C4-plantUML
java版本
$ java -version
java version "1.8.0_181"
IDEA版本(通过Help->About查看)
IntelliJ IDEA 2020.1 (Community Edition)

IDEA安装plantUML插件

IDEA选择File->settings->plugins然后在搜索框中输入plantUML进行搜索,然后点击PlantUML integration插件的Install,点击Restart IDE完成安装。

安装graphviz工具

  不安装graphviz只能生成uml sequence类型的图片,生成其它类型图片时会报如下错误:idea集成plantUML+C4-Model编写架构图_第1张图片
安装后可以渲染其它uml类型的图片,如我们的archimate格式。

  1. 下载graphviz-2.38.zip至本地;
  2. 解压到本地目录,我这里是D:\dev-envirment-setup\graphviz-2.38\目录
  3. 设置环境变量GRAPHVIZ_DOTidea集成plantUML+C4-Model编写架构图_第2张图片
  4. IDEA plantUML插件配置graphviz的执行文件dot.exe:idea集成plantUML+C4-Model编写架构图_第3张图片
  5. 至此graphviz安装配置完成;
  6. 测试是否配置成功:在IDEA中创建test.puml文件,并输入以下内容

    @startuml
    testdot
    @enduml

    点击IDEA右侧的plantUML会显示如下图右边内容,证明安装成功:
    idea集成plantUML+C4-Model编写架构图_第4张图片

集成C4-plantUML

  1. 下载C4-plantUML;考虑到网速问题,这里我选择国内的镜像地址C4-plantUML from gitee,git-bash.exe克隆镜像到本地/d/git/C4-PlantUML

    git clone https://gitee.com/mirrors/C4-PlantUML.git
  2. 编写示例代码C4-test.puml如下

    @startuml
    
    !include d:/git/C4-plantUML/C4_Container.puml
    'LAYOUT_WITH_LEGEND()
    LAYOUT_AS_SKETCH()
    Person(user,"用户")
    @enduml

    运行报错:
    idea集成plantUML+C4-Model编写架构图_第5张图片

  3. 报错原因是因为C4-plantUML代码中引用了网络资源

    Must@/d/git/C4-PlantUML>grep "githubusercontent" *.puml
    C4_Component.puml:!includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Container.puml
    C4_Container.puml:!includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Context.puml
    C4_Context.puml:!includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4.puml

    这个时候莫慌,做着已经考虑到了这个问题,只需要对这几个文件稍加修改即可,vi打开对应的三个文件vi C4_Container.puml C4_Context.puml C4_Component.puml,每个文件将第一行使用'注释掉,将第三行的注释'删除掉,保存即可,图形显示成功:
    image.png

  4. But,我写的用户两个字怎么乱码了,这个可咋办?
    网上有人说使用使用java -jar plantuml.jar -charset utf-8 C4-test.puml,即导出时添加-charset utf-8来改变字符集,我们来试试

    a) 找到plantuml.jar所在位置,idea新版plugins存放更换了位置到
         /c/Users/DELL/AppData/Roaming/JetBrains/IdeaIC2020.1/plugins/plantuml4idea/lib>ls
         plantuml.1.2020.9.jar  plantuml4idea.jar
    b) 执行java -jar plantuml.1.2020.9.jar -charset UTF-8 C4-test.puml
    c) 查看C4-test.png文件,然并没有解决乱码问题!!!

    后来发现注释掉LAYOUT_AS_SKETCH()后中文显示正常:
    idea集成plantUML+C4-Model编写架构图_第6张图片
    但是我就是想要这种效果怎么办?我们来看看LAYOUT_AS_SKETCH是个啥玩意儿?
    查找LAYOUT_AS_SKETCH位置:
    Must@/d/git/C4-PlantUML>grep -n LAYOUT_AS_SKETCH *.puml|grep define

     C4.puml:46:!definelong LAYOUT_AS_SKETCH #C4.puml文件的第46行

    输出46行下的部分内容:
    Must@/d/git/C4-PlantUML>sed -n '46,60p' C4.puml

     !definelong LAYOUT_AS_SKETCH
     skinparam backgroundColor #EEEBDC
     skinparam handwritten true
     skinparam defaultFontName "Comic Sans MS"
     center footer Warning: Created for discussion, needs to be validated
     !enddefinelong
    
     !define LAYOUT_TOP_DOWN top to bottom direction
     !define LAYOUT_LEFT_RIGHT left to right direction
    
     ' Boundaries
     ' ##################################
    
     !define Boundary(e_alias, e_label) rectangle "==e_label" <> as e_alias
     !define Boundary(e_alias, e_label, e_type) rectangle "==e_label\n[e_type]" <> as e_alias
     Must@/d/git/C4-PlantUML>

    发现没有,里面有一句skinparam defaultFontName "Comic Sans MS"引起了我的注意:现在要么我把这个改掉,要么我照着再自己定义一个LAYOUT_AS_SKETCH,那我就试试自己定义一个看看行不行,idea集成plantUML+C4-Model编写架构图_第7张图片
    事实证明完全可行,后面就可以用这个画图了,高兴~~~

延伸

在搜索解决办法的过程中,发现·vscode·也有对应的插件,将IDEA对应的plantUML插件替换为vscode中的PlantUML+Graphviz Preview,其它与IDEA步骤不变即可,(亲测可行)。

参考资料

你可能感兴趣的:(plantuml,architecture,idea)