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,找到如下代码:

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

        修改为:

  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,找到如下代码:

  // 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;
}

        修改为:

  // 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来做软件设计,毕竟是一个很成熟的标准,何必放着标准不用而去用其它呢。

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432454.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈结构化数据、非结构化数据,关系数据库、非关系数据库

结构化数据和非结构化数据两者之间存在一定的区别。以下是具体分析&#xff1a; - **结构化数据**&#xff1a;通常指的是那些组织严谨、格式规范统一的数据&#xff0c;它们存储在关系数据库中&#xff0c;可以通过二维表的形式进行逻辑表达。这类数据有明确的数据模型&#…

【小白学机器学习7】相关系数R,决定系数R2和SST=SSR+SSE, 离差,偏差,方差,标准差,编译系数,标志误。

目录 1 各种数据指标&#xff0c;分类整理 1.0 关于数据/值有3种 1.1 第1类&#xff1a;描述一堆数据特征的指标&#xff1a;集中度&#xff0c;离散度&#xff0c;形状特征 1.2 第2类&#xff1a;判断预测y值和观测值差距的指标 1.3 第3类&#xff1a;描述误差的各种指标…

容器化软件应用简化传统设备的连接

| Docker容器如何简化工业物联网解决方案 制造和包装工厂可通过集成IT和OT技术来改善运营&#xff0c;从而释放预测性维护、数据分析以及接入强大的企业管理应用等优势。然而&#xff0c;对于缺乏员工、时间或资源的企业而言&#xff0c;实施工业物联网解决方案并不容易。对此…

HashSet在添加元素时,是如何判断元素重复的? (原理详解 | 易错案例)

前言&#xff1a;我们知道Set中所存储的元素是不重复的&#xff0c;那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢&#xff1f; HashSet在添加元素时&#xff0c;是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c;注意&#xff0c;Obje…

有名信号量、网络协议模型、UDP编程发送端

我要成为嵌入式高手之3月5日Linux高编第十五天&#xff01;&#xff01; ______________________________________________________ 学习笔记 有名信号量 1、创建semget #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(…

js SheetJS 合并表格导出到同一个excel中

最近有个需求,我在一个页面显示了4个表格, 然后合并导出到excel文件中 四个表,四个sheet,一个excel文件 最后导出时这样: 实现: 1,页面有个导出的checkbox,勾选则导出,不勾选不处理 2,在一个函数中,集中处理四个表数据获取,并将结果返回出来 //获取数据后返回为…

开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?

为了向媒体投稿,庆祝2024年“三八”国际妇女节系列纪念活动,你可以遵循以下步骤: 策划与准备: 确定纪念活动的主题和目标,例如提升女性权益、表彰女性成就、促进性别平等。 策划一系列活动,如研讨会、表彰仪式、展览、讲座等,确保内容丰富多样。 准备相关的背景资料、活动介…

PyTorch搭建LeNet神经网络

函数的参数 1、PyTorch Tensor的通道排序 [batch, channel, height, width] batch: 要处理的一批图像的个数 channel: 通道数&#xff08;一般是R G B 三个通道&#xff09; height: 图像的高度 width: 图像的宽度 2.Conv 2d 卷积层的参数 [in_channels, out_channels, ke…

从零开始学习Netty - 学习笔记 -Netty入门【自定义编码器解码器】

自定义编码器解码器 通过一个简单案例&#xff0c;我们自己去实现一个编码器 和解码器 实现思路 编码器&#xff08;Encoder&#xff09;实现&#xff1a; 在编码器中&#xff0c;实现了 ByteToMessageCodec<Message> 类&#xff0c;并覆盖了 encode() 方法来处理消息的编…

【HarmonyOS】Dev Eco Studio4.0安装教程

目录 下载安装开发工具配置 下载 Dev Eco Studio4.0下载连接→https://developer.huawei.com/consumer/cn/next/deveco-studio/ 安装 点击Next 选择安装目录。点击Next 勾选创建桌面快捷方式和环境变量&#xff0c;点击Next 点击Install&#xff0c;安装 等待安装 选…

Node.js最准确历史版本下载(以下载Node.js16.17.1版本为例)

先进入官网:Node.js https://nodejs.org/en 括号中LTS代表稳定版本. 嫌其他冗余博客帖子多&#xff0c;找起来费眼睛,可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,跟上面同样的步骤

做分析用什么工具

做分析用什么工具 导读 数据分析是数据辅助决策的最后一公里&#xff0c;是最终的数据可视化展示与探索分析的部分&#xff0c;选择使用最适合的数据展示方式&#xff0c;可以帮助分析人员大大提升分析效率。 问题&#xff1a; ● 纠结选择哪个工具 ● 纠结从哪里学起&#x…

Java异常的介绍与处理

一、异常与错误(Error)的区别&#xff1a; 异常&#xff08;Exception&#xff09;和错误&#xff08;Error&#xff09;都是指程序执行过程中的问题&#xff0c;但它们之间存在一些重要的区别。 异常&#xff08;Exception&#xff09;&#xff1a; 异常表示程序在执行期间可能…

Memcached介绍和详解

Memcached介绍 Memcached是一个高性能的分布式内存对象缓存系统&#xff0c;它通过在内存中缓存数据来减少数据库负载&#xff0c;加快动态Web应用程序的响应速度。 以下是Memcached的一些关键特点和作用&#xff1a; 分布式缓存&#xff1a;Memcached是分布式的&#xff0c;不…

Android高级工程师面试实战,三幅图给你弄懂EventBus核心原理

阿里技术一面-35min 自我介绍 Android 有没有遇到OOM问题(有遇到内存泄漏问题)Handler机制ThreadLocalActivity启动到加载View过程View绘制过程LinearLayout (wrap_content) & TextView (match_parent) 最终结果???OKHttp(1. 为什么选择它&#xff1f; 2. 性能了解不…

阿里云服务器几核几G怎么选择?带宽多少合适?

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

Java 学习和实践笔记(27):Object类的基本特性、toString方法以及IDEA的部分快捷键介绍

Object类基本特性&#xff1a; 1.Object类是所有类的父类&#xff0c;所有的Java对象都拥有Object类的属性和方法&#xff08;注意拥有并不等于可以直接使用&#xff09; 2.如果在类的声明中未使用extends&#xff0c;则默认继承Object类。 toString方法是Object类里定义的一个…

Word中的文档网格线与行距问题

在使用Word编辑文档时&#xff0c;经常会发生以下动图展示的这种情况&#xff1a; 上面的动图里&#xff0c;将文字大小放大到某个字号时&#xff0c;单倍行距的间距突然增加很多。造成这种情况的原因是文档中定义了网格线&#xff0c;并且设置了对齐到网格线。如果取消文档中…

[清爽快捷] Ubuntu上多个版本的cuda切换

做到真正的一行代码搞定&#xff0c;只需要修改对应软链接&#xff0c;就可以轻松实现快捷切换cuda 查看已安装的cuda版本有哪些 一般如果我们都是使用默认位置安装cuda的话&#xff0c;那么其安装路径都是/usr/local。如果要查看该目录下已经安装有哪些版本的cuda&#xff0c…

Git分布式管理-头歌实验本地版本库

一、本地版本库创建 任务描述 本地Git操作三部曲是“修改-添加-提交”&#xff0c;即先要在本地仓库进行添加、删除或编辑等修改&#xff0c;然后将本地所做的修改添加至暂存区。添加至暂存区的这些本地修改&#xff0c;并未提交到本地仓库&#xff0c;需要执行提交命令才能将暂…