StarUML6.0.1使用

1. 简介

作为一个软件开发人员,平时免不了做一定的软件设计,标准做法就是采用UML来设计:

  • 讨论功能流程时采用时序图、活动图来表达;
  • 做业务功能架构时采用组件图来表达;
  • 做系统部署架构时采用部署图来表达;
  • 做需求分析时采用用例图来表达;
  • 做系统内部设计时采用包图、类图、对象图来表达;

二十年前我们用Rational Rose,过了五六年感觉PowerDesign更好,之后十多年一直钟爱PD,直到上个月用了7年的笔记本坏了,新笔记本重装环境时,再也不想去破解PowerDesign,而是寻找一个开源的UML工具软件来用用看,一通baidu之后发现了StarUML,是由思密达主导开发的一款开源UML工具软件,看看官网的图片介绍还是不错的。

官网地址:StarUML

开源地址:https://github.com/staruml ,这里有很多工程。一般我们直接去官网下载已经制作好的安装包即可,安装都很简单。

2. 破解

直接采用官网制作好的安装包,在每次保存时总是提示去注册,让人很烦;把UML设计图导出png, jpeg图片时,更是留下了unregisted之类的水印,根本没法在文档里使用。我们需要解决两个问题:

  1. 去掉注册提示框;
  2. 去掉图片上的水印。

解决这两个问题很简单,去StarUML安装目录下寻找app.asar文件,修改这个包里的两处地方即可。

app.asar是一个压缩包,需要用asar来生成和解压,asar用npm来安装:

npm install -g asar

npm自然是安装nodejs就有了,搞点前端的人都不用说了。

执行asar看看:

$ asar -h

Usage: asar [options] [command]

Manipulate asar archive files

Options:

-V, --version output the version number

-h, --help display help for command

Commands:

pack|p [options] <dir> <output> create asar archive

list|l [options] <archive> list files of asar archive

extract-file|ef <archive> <filename> extract one file from archive

extract|e <archive> <dest> extract archive

*

help [command] display help for command

2.1 解包app.asar

我们进入StarUML安装目录,找到app.asar文件,如我的安装目录C:\Program Files\StarUML\resources下有如下文件:

app.asar app-update.yml elevate.exe* mdj.ico

解压app.asar:

asar extract app.asar app

得到app目录, 进入目录app\src\engine:

C:\Program Files\StarUML\resources\app\src\engine

$ ls

clipboard-manager.js default-commands.js engine.js font-manager.js pdf-graphics.js selection-manager.js update-manager.js

command-manager.js diagram-export.js factory.js license-manager.js project-manager.js unicode.js

最关键的是两个文件:license-manager.js和diagram-export.js,看看英文都知道,一个管注册license,一个管图片导出。

2.2 去掉注册提示

打开license-manager.js,找到如下代码:

javascript 复制代码
  checkLicenseValidity() {                         
    if (packageJSON.config.setappBuild) {          
      setStatus(this, true);                       
    } else {                                       
      this.validate().then(                        
        () => {                                    
          setStatus(this, true);                   
        },                                         
        () => {                                    
          setStatus(this, false);                
          UnregisteredDialog.showDialog();                       
        },                                         
      );                                           
    }                                              
  }                                                

修改为:

javascript 复制代码
  checkLicenseValidity() {                         
    if (packageJSON.config.setappBuild) {          
      setStatus(this, true);                       
    } else {                                       
      this.validate().then(                        
        () => {                                    
          setStatus(this, true);                   
        },                                         
        () => {                                    
          //setStatus(this, false);                
          //UnregisteredDialog.showDialog();       
          setStatus(this, true);                   
        },                                         
      );                                           
    }                                              
  }                                                

那么我们的注册提示就去掉了。

2.3 去掉图片水印

打开diagram-export.js,找到如下代码:

javascript 复制代码
  // Draw watermark if application is not registered
  if (app.licenseManager.getStatus() !== true) {
    diagram.drawWatermark(
      canvas,
      canvasElement.width,
      canvasElement.height,
      70,
      12,
      "UNREGISTERED",
    );
  } else if (app.licenseManager.getLicenseInfo().licenseType === "STD") {
    const dgmType = diagram.constructor.name;
    if (app.licenseManager.isProDiagram(dgmType)) {
      diagram.drawWatermark(
        canvas,
        canvasElement.width,
        canvasElement.height,
        45,
        12,
        "PRO ONLY",
      );
    }
  }

  // Draw diagram to the new canvas
  diagram.arrangeDiagram(canvas);
  diagram.drawDiagram(canvas);

  // Return the new canvas to base64-encoded data
  var data = canvasElement
    .toDataURL(type)
    .replace(/^data:image\/(png|jpeg);base64,/, "");
  return data;
}

修改为:

javascript 复制代码
  // Draw watermark if application is not registered
  /*
  if (app.licenseManager.getStatus() !== true) {
    diagram.drawWatermark(
      canvas,
      canvasElement.width,
      canvasElement.height,
      70,
      12,
      "UNREGISTERED",
    );
  } else if (app.licenseManager.getLicenseInfo().licenseType === "STD") {
    const dgmType = diagram.constructor.name;
    if (app.licenseManager.isProDiagram(dgmType)) {
      diagram.drawWatermark(
        canvas,
        canvasElement.width,
        canvasElement.height,
        45,
        12,
        "PRO ONLY",
      );
    }
  }
  */

  // Draw diagram to the new canvas
  diagram.arrangeDiagram(canvas);
  diagram.drawDiagram(canvas);

  // Return the new canvas to base64-encoded data
  var data = canvasElement
    .toDataURL(type)
    .replace(/^data:image\/(png|jpeg);base64,/, "");
  return data;
}

就是把两个处理水印的代码注释掉即可。

2.4 打包app.asar

在安装目录C:\Program Files\StarUML\resources下执行:

asar pack app app.asar

新的app.asar已经生成成功,则我们重新去打开StarUML,以上两个问题都完美解决了。

3. 总结

StarUML6.0.1还是很好使用的,很小巧,建议使用UML做架构设计的同仁来试试,看到很多年轻开发人员做设计时随意用word里的图形功能来设计,或者其它脑图来设计,我还是推荐采用UML来做软件设计,毕竟是一个很成熟的标准,何必放着标准不用而去用其它呢。

相关推荐
静心观复2 天前
drawio画java的uml的类图时,class和interface的区别是什么
java·uml·draw.io
weixin_4569042718 天前
数据库设计与UML图
数据库·uml
希赛网21 天前
软考软件设计师常考知识点:(一)计算机组成与体系结构
软考·uml·编程语言·计算机基础·软件设计师
rolt22 天前
[pdf、epub]320道《软件方法》强化自测题业务建模需求分析共279页(202509更新)
产品经理·ddd·架构师·uml·领域驱动设计
攻心的子乐25 天前
软考 UML类图 泛化继承 实现 聚合 组合(最强) 依赖(最弱
uml
攻心的子乐1 个月前
软考 UML 用例图 extend扩展关系 include包含关系 泛化继承inherit关系
uml
「QT(C++)开发工程师」1 个月前
UML | 最好的类图设计工具结合CSDN天启呈现-领路架构师
数据库·uml·类视图
小鱼儿LY1 个月前
软考系统架构设计师之UML统一建模语言
系统架构·软考·uml·架构设计师
workflower2 个月前
GitHub宕机自救指南
测试用例·需求分析·uml·敏捷流程·结对编程
青草地溪水旁2 个月前
Astah UML 中,状态机(State Machine)的建模最合适使用「UML 状态图(State Diagram)」
uml·状态机