本文介绍如何在本地运行plantuml-server。 在本地运行plantuml-server有诸多好处,首先它提供一个web界面,可以在上面编辑并生成图示;其他其他应用(比如VSCode)可以使用这个server提供的服务,快速生成图示。
安装plantuml-server
从plantuml-server可以下载其Release,是一个war文件,比如plantuml-v1.2020.1.war。这个war文件是不能直接运行的,你缺少的是一个Web服务器。
可以使用Jetty作为plantuml-war的Web服务器,可以从repo1.maven.org下载一个jetty-runner,比如:jetty-runner-9.4.27.v20200227.jar。
下载之后,把war和jar文件放在同一个目录,就可以通过下面的命令运行plantuml-server:
java -jar jetty-runner-9.4.27.v20200227.jar plantuml-v1.2020.1.war
上面会在0.0.0.0:8080运行一个http服务。如果想修改IP地址和端口,可以这样:
java -jar jetty-runner-9.4.27.v20200227.jar --host 127.0.0.1 --port 8888 plantuml-v1.2020.1.war
如果只是在本地使用的话,建议不要在0.0.0.0启动http服务。
需要注意的是,plantuml-server对生成的图片默认大小是4096x4096像素,可以通过设置环境变量修改成其他值,比如
set PLANTUML_LIMIT_SIZE=8192
,参考: https://plantuml.com/faq
在VSCode中使用plantuml
首先,可以在VSCode中搜索并安装vscode-plantuml扩展。
安装之后,就可以将plantuml源代码文件(.diagram或者.wsd)转化成图片(PNG或者SVG)。
vscode-plantuml默认会调用plantuml.jar来生成图片,这样响应事件比较长,因为加载jar包需要时间。可以配置vscode-plantuml来使用上一个章节配置好的plantuml-server来大幅加快生成速度。所需要做的是打开配置,并将plantuml server选项设置成相应的地址,比如:
http://127.0.0.1:8888
vscode-plantuml还支持渲染markdown中内嵌的plantuml。不过需要注意注意,由于plantuml-server采用的是http而不是https提供服务,当VSCode提示是否允许不安全内容时,要选择允许。
如果你偏好的是asciidoc而不是plantuml,VSCode也可以做到在文档预览中渲染只要需要安装扩展asciidoctor,并且增加以下配置:
"asciidoc.preview.attributes": {
"plantuml-server-url": "http://127.0.0.1:8888"
}
在asciidoctor页面可以找到更多相关参数。
在asciidoc中插入plantuml有几种方式。
直接插入:
[plantuml,sample-diagram,svg]
----
class Sample {
}
----
引用其他plantuml文件:
[plantuml,activity,svg,align="center"]
----
include::activity_diagram.txt[]
----
上述方式的简便语法:
plantuml::activity_diagram.txt[format=svg,align="center"]
其他参考
- How to edit Markdown + UML in Visual Studio Code
- Markdown native diagrams with PlantUML
- Preview AsciiDoc with PlantUML in VS Code
- Converting from AsciiDoc to MS Word
- System environment variables in Jetty application
- PlantUML (.puml) files not rendering inside repo
ASCIIDOC相关
- asciidoctor-diagram
- DocBook to Word Conversion?
- https://en.wikibooks.org/wiki/XQuery/DocBook_to_Microsoft_Word
- An introduction to DocBook, a flexible markup language worth learning
- DocBook XSL: The Complete Guide: Chapter 25. Other output forms
- https://powerman.name/doc/asciidoc
- https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
- https://asciidoctor.org/docs/user-manual/
(完)
2020-10-08更新
对于某些Diagram,比如State Diagram,需要安装Graphviz。假设使用scoop安装的是2.44版的Graphviz,安装之后需要手动执行以下dot -c
,参考Important note about version。否则会提示 Error: dot generates empty file. Check you dot installation.
plantuml会自动查找Graphviz的可执行文件,可以使用以下命令测试查找的情况:
java -jar plantuml.jar -testdot
也可以使用下面的uml源代码
@startuml
testdot
@enduml
如果找不到Graphviz的话,可能需要指定GRAPHVIZ_DOT环境变量到dot的可执行文件。
(更新完)
2020-12-17更新
VSCode的AsciiDoc插件貌似不能通过plantuml server来渲染Plantuml了。一个折衷的办法是通过Kroki来做后端跟各种作图工具进行交互。
AsciiDocFx是一款基于JavaFx的AsciiDoc写作环境,可以一试。
一些额外参考
- Ardemius/asciidoctor-presentation: An end to end presentation to discover the great Asciidoctor processor
- GitHub - ullenboom/ppt2asciidocslides: Converts slides from PPTX to Asciidoc(tor)
- Consider Using Asciidoctor for Your Next Presentation
- Asciidoctor reveal.js | Asciidoctor
(更新完)