本来就是想画个时序关系,然后就在这个坑里爬了很久。解决问题的办法其实就是绕过去。
随便百度一个教程(https://blog.csdn.net/Ada_who/article/details/105362058),跟着配环境。
1、环境
1.1 JAVA
由于官方下载JDK需要注册,还挺麻烦,就到了一些镜像(Index of java-local/jdk)找了个老版本8u202用。安装后,要配环境变量。Path中加入/path/to/jdk/bin和/path/to/jre/bin。或者安装的时候选择写入PATH即可。
在命令行输入java -version,有输出表示安装成功。
1.2 GRAPHVIZ
在官网(Download | Graphviz)下载,目前看版本上没啥障碍,新版本和旧版本都可以跑。建议用exe安装,然后写环境变量,Path中加入/path/to/graphviz,还需要额外加一个GRAPHVIZ_DOT,值是dot.exe的路径。
在命令行输入dot -c,会报错无权限写config6。用管理员权限打开命令行可以。
在命令行输入dot -version。注意这里,虽然出来了loaded successful,但是并没有退出,为什么呢?当时没多想就继续装别的了。没想到的是,坑居然是它。
1.3 Sublime3
在官网(Sublime Text - Text Editing, Done Right)下载,装个新版本就行。
1.4 PlantUML for Sublime
打开sublime,preferences->package control->Add Repository
然后在url中输入https://github.com/jvantuyl/sublime_diagram_plugin.git,回车,等待加载完。
preferences->package control->Install Package,等待加载完,输入 sublime_diagram_plugin,安装,重启sublime。
重启sublime 提示 Unable to load diagram plugin, check console for details
2、debug
开始以为是版本问题,试了几种组合,jdk8、jdk6都一样。graphviz4-5都一样。环境变量怎么改也都一样。
后来做了个简单的测试,在browse packages中打开package文件夹,找sublime_diagram_plugin,在diagram中找到了jar,执行命令
java -jar plantuml.1.2022.5.jar test.txt
居然输出了UML图,那么问题就是Sublime自己了。再看console的报错信息,定位到diagram_plugin.py文件,本以为是没有找到processor,结果是找到了的,还输出了,只是它输出了dot版本信息,但是却说无法判断dot版本。就很直接的把报错干掉,在smoke测试中失败了。
最后查调用过程,看到PlantUMLProcessor类的load中,有个CHECK_ON_STARTUP,在里面有个版本检测等测试。所以把它设为false不就得。
推测可能的原因是dot -version没有推出导致的。表现出了获取到了版本信息,但是没有推出returncode是异常。再结合之前功能测试是好的,因此把Diagram.sublime-settings中check_on_startup改成false屏蔽检测。
{
// restart sublime to apply the changes
"viewer": "WindowsDefaultViewer", // Preview, QuickLook, EyeOfGnome, WindowsDefaultViewer
"check_on_startup": false,
"new_file": false, // generate new file each time
"output_format": "png", // valid values: png, svg, txt, utxt, latex
"charset": "UTF-8" // Can be "UTF-8" - to support non-latin text in diagram
}
快捷键使用,preferences->key bindings,输入
[
{"keys": ["alt+m"], "command": "display_diagrams"}
]
一下子就好了。
3、总结
虽然这个软件的安装没有什么恶心的编译,但是没想到一个严谨的测试却因为一些少见的意外导致无法使用。因此,在严谨的软件到了用户手里,谁知道会遇到什么情况,还得用户自己看代码找问题。