MacOS运行PlantUML相关Java代码时如何禁止Duke图标在程序坞显示
你遇到的现象确实是PlantUML初始化AWT图形子系统导致的:MacOS下默认AWT类加载时会启动图形上下文,从而在程序坞弹出Duke图标,仅首次加载类时触发和你观察到的表现一致。
解决方案
方案1:启用Headless模式(推荐)
Headless是Java为无图形界面运行场景设计的模式,开启后AWT不会初始化图形相关上下文,完全不会影响PlantUML的SVG生成能力,从根源避免图标弹出。
有两种配置方式:
- JVM启动时添加参数:
-Djava.awt.headless=true,无代码侵入,兼容性最好 - 代码中在所有PlantUML逻辑执行前手动设置,必须保证设置时机早于PlantUML相关类的第一次加载:
// 放在入口函数最开头,或者调用toSvg()方法的类的静态初始化块中 System.setProperty("java.awt.headless", "true")
如果设置时AWT已经完成初始化,该配置不会生效。
方案2:MacOS专属隐藏配置
如果你不想开启全局Headless模式,可以添加MacOS专属的JVM参数,告知系统当前应用为后台UI元素,不需要在程序坞展示:-Dapple.awt.UIElement=true
该配置仅在MacOS系统生效,不会改变其他平台的运行表现。
两种方案都不会对PlantUML的SVG生成逻辑产生任何影响,输出结果和修改前完全一致。
内容的提问来源于stack exchange,提问作者Duncan McGregor
相关产品推荐
相关产品推荐

