【问题标题】:How prevent PlantUML from creating error images?如何防止 PlantUML 创建错误图像?
【发布时间】:2021-06-16 11:58:26
【问题描述】:

当 PlantUML 控制台工具在图表中遇到语法错误时,它会生成一个带有错误回溯的图像,如下所示:

有没有办法禁用生成错误图像并可能将回溯输出到标准错误?


我使用 PlantUML CLI 从几个源文件生成图像,如下所示:

$ plantuml diag1.puml diag2.puml diag3.puml

其中一些图表可能有错误的语法,我需要跳过错误的图表。

我可以解析标准错误并从那里得到错误的图表名称,但这是最后的手段。我相信对于提到的行为应该有一个原生选项。

【问题讨论】:

    标签: plantuml


    【解决方案1】:

    2021 年 7 月 7 日更新

    自 Plantuml 版本 1.2021.8 起,有一个新选项 -noerror 正是这样做的:跳过错误图表并将有关错误的信息写入标准错误。

    $ plantuml -noerror diag1.puml diag2.puml diag3.puml
    Error line 5 in file: diag2.puml
    Some diagram description contains errors
    

    只生成了两张图片。

    专业提示:Plantuml 有一个很棒的forum,创建者会及时响应所有问题并在几天内将更改推送到新版本中。


    旧答案

    在普通模式下似乎是不可能的,但在-pipe 模式下可能的。寻找的参数是-pipeNoStderr

    如果您在控制台中以管道模式运行 PlantUML,您可以键入图表代码,并且在每个图表之后它将立即输出图像的二进制代码。您也可以在脚本中使用它在标准输入中输入代码并在标准输出中获取结果。


    你应该像这样运行 Plantuml:

    $ plantuml -pipe -pipeNoStderr -pipedelimitor ___sep___
    

    这里:

    • -pipe 表示在管道模式下启动 Plantuml。它将接受标准输入中的图表代码,立即对其进行处理并以二进制格式在标准输出中返回结果;
    • -pipeNoStderr 告诉 Plantuml 不要渲染错误图像。相反,它将以文本格式返回错误回溯;
    • -pipedelimitor 告诉 Plantuml 如果您将多个图表源发送到管道中,则在图表之间添加分隔符。通过这种方式,您可以确定一个图像的结束位置和另一个图像的开始位置;
    • ___sep___ 是我选择的一个字符串作为分隔符,它可以是你喜欢的任何东西,但足够独特。

    管道工作流迫使我完全重写生成图表的工具。 Python中的具体示例超出了这个问题的范围,但一般步骤是:

    1. 收集您要渲染的所有图表源。
    2. 检查每个来源是否以@startuml 开头并以@enduml 结尾(否则此类错误来源可能会损坏相邻图表)。
    3. 将所有来源放入一个string 变量中,并用几个换行符分隔。
    4. 在管道模式下运行 Plantuml 子进程。
    5. 将组合的源字符串提供给它。
    6. 从标准输出获取响应并用分隔符拆分(在我的情况下为___sep___
    7. 循环浏览结果列表并提醒用户注意以ERROR 开头的元素并以二进制格式保存不以ERROR 开头的元素。

    This article 帮了大忙。它有一个关于 JavaScript 的示例项目,可以异步解决问题(不像我)。

    【讨论】:

    • 嗨,我试过像这样使用 --noerror ,但它完全不起作用:cat class.puml | java -jar plantuml.jar -noerror -pipe > class.png
    • @Yong 我认为这个参数在管道模式下不起作用。像这样尝试:java -jar plantuml.jar -noerror class.puml。对于管道模式,您可以使用我的旧答案,但它有点复杂
    • 感谢@Dany!它似乎与cat class.puml | java -jar plantuml.jar -pipe -pipeNoStderr > class.png 一起工作,因为这至少不会生成图像......但需要注意的是 1. 如果错误不是语法明智的(如果错误是由于缺少Graphviz,它会打印一个错误并仍然生成图像)。 2. 我当前的调用不会很好,因为即使它是一个错误,它仍然会直接通过管道传输到文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多