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之类的水印,根本没法在文档里使用。我们需要解决两个问题:
- 去掉注册提示框;
- 去掉图片上的水印。
解决这两个问题很简单,去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 commandCommands:
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 registeredif (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 canvasdiagram.arrangeDiagram(canvas);diagram.drawDiagram(canvas);// Return the new canvas to base64-encoded datavar 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 canvasdiagram.arrangeDiagram(canvas);diagram.drawDiagram(canvas);// Return the new canvas to base64-encoded datavar 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来做软件设计,毕竟是一个很成熟的标准,何必放着标准不用而去用其它呢。
相关文章:
StarUML6.0.1使用
1. 简介 作为一个软件开发人员,平时免不了做一定的软件设计,标准做法就是采用UML来设计: 讨论功能流程时采用时序图、活动图来表达;做业务功能架构时采用组件图来表达;做系统部署架构时采用部署图来表达;做…...
Java开发与配置用到的各类中间件官网
开发配置时用到了一些官网地址,记录一下。 activemq 官网:ActiveMQ elk 官网:Elasticsearch 平台 — 大规模查找实时答案 | Elastic nginx 官网:nginx maven 官网:Maven – Welcome to Apache Maven nexus 官网&a…...
GitHub和Gitee的基本使用和在IDEA中的集成
文章目录 【1】GitHub1.创建仓库2.增加和修改文件3.创建分支4.删除仓库5.远程仓库下载到本地 【2】Gitee1.创建仓库2.远程仓库下载到本地. 【3】IDEA集成GitHub【4】IDEA集成Gitee1.在Gitee中修改,同步到本地2.从Gitee中下载项目 【1】GitHub 1.创建仓库 先登陆这…...
[Electron]中screen屏幕
Electron中screen 检索有关屏幕大小、显示器、光标位置等的信息。可以实现以下两个功能 窗口全屏 显示在额外显示器上 方法 screen.getCursorScreenPoint() 返回 Point当前鼠标的绝对位置。 screen.getPrimaryDisplay() 返回主窗口Display screen.getAllDisplays() 返…...
ubuntu 卸载miniconda3
一开始安装路径错了,需要重新安一次,就一起记录了。 前提是这种方式安装: ubuntu安装miniconda3管理python版本-CSDN博客 删除Miniconda的安装目录 这目录就是你选择安装的时候指定的,如果记不得了,可以这样查看 which conda 这…...
光致发光谱荧光量子效率测量系统
荧光量子积分球是一个专门用于测量荧光量子效率的设备。荧光量子效率是指物质吸收光后所发射的荧光光子数与所吸收的激发光光子数之间的比值。这种设备通过比较待测荧光物质和已知荧光量子产率的参比物质,在相同激发条件下所测得的积分荧光强度(即校正的…...
c++ 常用的STL
前言 写这篇博客目的是为了记录在刷算法题中使用过的STL,因为有些不太常用的会遗忘。这篇博客只是作为笔记,不是详细的STL,因此只会对常用方法说明,不会详细介绍。此外在后面用到新的STL内容时会再补充。 列队 基础列队 基本列…...
接口自动化测试思路和实战 —— 编写线性测试脚本实战!
接口自动化测试框架目的 测试工程师应用自动化测试框架的目的: 增强测试脚本的可维护性、易用性(降低公司自动化培训成本,让公司的测试工程师都可以开展自动化测试)。 自动化测试框架根据思想理念和深度不同,渐进式的分为以下几种: 线性脚本框架 模块…...
python控制语句-1.2
目录 循环结构 while循环 for循环 循环结构练习-1 循环嵌套 循环结构练习-2 循环控制语句(continue & break) 循环结构 while循环 语法 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序&am…...
HTML 学习笔记(一)开始
一、介绍: 首先引用百度百科的一段话作为介绍: HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本…...
查看自己的ip地址的网站
有时候需要知道自己的ip地址,可以上这个网站查看: What Is My IP? Best Way To Check Your Public IP Address 网站的域名是https://www.whatismyip.com/ 还是挺好记的。...
ES分布式搜索-索引库操作
索引库操作 1、mapping映射属性 可以查看官方文档学习:ES官方手册 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串:text(可…...
Win11 没有网络bug
1.问题描述 没有网络,dns一直是固定的,但是dns已经是自动获取了(MAC地址随机) 2.解决办法 1.首先,删除所有网络的手动dns配置,控制中心那个dns管理没有用,在设置中删除网络,不然问题还会出现 - 2.然后,进入注册表\HKEY_LOCAL_MACH…...
洛谷 1025.数的划分
这道题用的知识点是DFS剪枝。难的不在DFS上,而是在剪枝上如何选择。 思路:这道题我们看到是按照字典序排的,但是,我们注意到,看似是全排列的递归,实则不是。 我们前面也了解过,全排列的数字大…...
MySQL实战:SQL优化及问题排查
有更合适的索引不走,怎么办? MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即为基数 查…...
加密与安全_使用Java代码操作RSA算法生成的密钥对
文章目录 Pre概述什么是非对称加密算法?如何工作?示例:RSA算法特点和优势ECC:另一种非对称加密算法 Code生成公钥和私钥私钥加密私钥加密私钥解密 ( 行不通 )私钥加密公钥解密公钥加密和公钥解密 (行不通)保…...
Spring Boot中实现图片上传功能的两种策略
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
07.axios封装实例
一.简易axios封装-获取省份列表 1. 需求:基于 Promise 和 XHR 封装 myAxios 函数,获取省份列表展示到页面 2. 核心语法: function myAxios(config) {return new Promise((resolve, reject) > {// XHR 请求// 调用成功/失败的处理程序}) …...
【Linux】第四十一站:线程控制
一、Linux线程VS进程 1.进程和线程 进程是资源分配的基本单位线程是调度的基本单位线程共享进程数据,但也拥有自己的一部分数据:线程ID一组寄存器(上下文)栈errno信号屏蔽字调度优先级 2.进程的多个线程共享 同一地址空间,因此Text Segment、…...
ChatGPT提示词工程:prompt和chatbot
ChatGPT Prompt Engineering for Developers 本文是 https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/ 这门课程的学习笔记。 ChatGPT提示词工程:prompt和chatbot 文章目录 ChatGPT Prompt Engineering for DevelopersWhat …...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
