![logo](assets/logo/logo-128.png)

<p align="center">
  <a href="README.md">English</a> ·
  <strong>简体中文</strong> ·
  <a href="README_ja.md">日本語</a>
</p>

# MooTool

开发者常备小工具

[![码云Gitee](https://gitee.com/zhoubochina/MooTool/badge/star.svg?theme=blue)](https://gitee.com/zhoubochina/MooTool)
[![GitHub stars](https://img.shields.io/github/stars/rememberber/MooTool.svg)](https://github.com/rememberber/MooTool)
[![GitHub release](https://img.shields.io/github/v/release/rememberber/MooTool)](https://github.com/rememberber/MooTool/releases)
[![GitHub license](https://img.shields.io/github/license/rememberber/MooTool)](https://github.com/rememberber/MooTool/blob/master/LICENSE.txt)

<a href="https://hellogithub.com/repository/4e5f287079734f98890a69d56000b361" target="_blank"><img src="https://api.hellogithub.com/v1/widgets/recommend.svg?rid=4e5f287079734f98890a69d56000b361&claim_uid=0UhXFJvP9ndHtiB" alt="Featured｜HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" /></a>

## 支持的平台
Windows • Linux • macOS

## 截图速览

> 以下为主要功能界面截图。翻译、UA分析、图片助手、PDF、环境变量、系统信息、配置文件转换、Protobuf 等模块暂未单独配图，可在安装后于对应 Tab 中体验。

![随手记](screen_shoot/quick_note_2_mac.png)

![随手记-快捷替换](screen_shoot/quick_replace_mac.png)

![Overview](screen_shoot/time_mac_2.png)

![Overview](screen_shoot/json_mac_2.png)

![Overview](screen_shoot/host_mac_2.png)

![Overview](screen_shoot/http_mac_2.png)

![Overview](screen_shoot/encode_mac_2.png)

![Overview](screen_shoot/qr_code_mac_2.png)

![Overview](screen_shoot/crypto_mac_2.png)

![Overview](screen_shoot/calculator_mac_2.png)

![Overview](screen_shoot/net_mac_2.png)

![Overview](screen_shoot/color_board_mac_2.png)

![Overview](screen_shoot/regex_mac_2.png)

![Overview](screen_shoot/cron_mac_2.png)

![Overview](screen_shoot/java_mac_2.png)

![Overview](screen_shoot/diff_mac.png)

![Overview](screen_shoot/mt-favoriteColor.png)

![Overview](screen_shoot/quick_note_light_mac.png)

![主题与外观](screen_shoot/theme.png)

## 下载

[https://github.com/rememberber/MooTool/releases](https://github.com/rememberber/MooTool/releases)  
[https://gitee.com/zhoubochina/MooTool/releases](https://gitee.com/zhoubochina/MooTool/releases)

## 鼓励/赞赏

**如果MooTool项目对您有所帮助或带来便利，  
欢迎对我每天下班和周末时光的努力进行肯定，  
您的赞赏将会给我带来更多动力**

![zanshang](assets/material/wx-zanshang.jpg)

# MooTool全功能地图

> 多个工具模块提供统一的「历史记录」子 Tab，支持搜索、应用、复制输入/输出、删除与清空。

```text
MooTool
├── 随手记
│   ├── 多语言语法高亮支持
│   ├── 常见语言代码格式化
│   │   ├── SQL
│   │   ├── JSON
│   │   └── Java
│   ├── 有序/无序列表
│   ├── Markdown 实时预览
│   ├── Markdown 插入图片
│   ├── 导出/批量导出，搜索与全局查找
│   ├── 文档信息（创建/更新时间、字数等）
│   ├── 超链接识别与点击跳转
│   ├── 字体、字号、列表颜色
│   └── 快捷替换面板
│       ├── 侧栏集中提供以下批量文本操作，支持仅处理选中行：
│       ├── 自动保存
│       ├── 去掉空格
│       ├── 去掉空行
│       ├── 去掉Tab(\t)
│       ├── 科学计数法->普通数字
│       ├── 普通数字->科学计数法
│       ├── 普通数字->千分位
│       ├── 千分位->普通数字
│       ├── 下划线命名->驼峰命名
│       ├── 驼峰命名->下划线命名
│       ├── 大写->小写
│       ├── 小写->大写
│       ├── 去掉换行
│       ├── 换行->,
│       ├── 换行->','
│       ├── 换行->","
│       ├── ,->换行
│       ├── ','->换行
│       ├── ","->换行
│       ├── Tab(\t)->换行
│       ├── 按行去重
│       ├── 按行去重并统计出现次数
│       ├── 转义
│       ├── 反转义
│       ├── 按行倒序
│       ├── 按行A->Z排序
│       ├── 按行Z->A排序
│       └── 按拼音排序
├── 时间转换
│   ├── 时间戳转换
│   │   ├── 时间->时间戳(毫秒)
│   │   ├── 时间戳(毫秒)->时间
│   │   ├── 时间戳->时间(秒)
│   │   └── 时间->时间戳(秒)
│   ├── 历史记录
│   ├── 大屏时钟
│   └── 时区选择与快捷时区
├── JSON
│   ├── JSON格式化
│   │   ├── Key 按字母顺序排序
│   │   ├── 忽略 key 大小写
│   │   └── 检查重复 key
│   ├── JSON压缩
│   ├── 导出/批量导出，查找
│   ├── 字体、字号
│   ├── JSON Key Value互转
│   ├── JSON转XML
│   ├── XML转JSON
│   ├── JavaBean转JSON
│   ├── JSON转JavaBean
│   ├── 转义
│   ├── 反转义
│   ├── 通过JsonPath获取JSON数据
│   └── 可视化获取JsonPath
├── 翻译
│   ├── 多语言互译（中/英/日/韩/法/西/德/俄等 20+ 语言，支持自动检测）
│   ├── Google / Bing 翻译源，失败时自动降级
│   ├── 收藏到单词本
│   ├── 单词本
│   │   ├── 搜索、新建、编辑、删除
│   │   └── 重新翻译
│   └── 翻译历史记录
├── Host
│   ├── Host格式化/语法高亮
│   ├── 本机Host管理/查看
│   ├── Host导入/导出
│   └── 搜索与查找/替换
├── HTTP
│   ├── HTTP请求，支持GET/POST/PUT/DELETE/HEAD/PATCH/OPTIONS
│   ├── cURL 导入
│   ├── HTTP Header/Body格式化
│   ├── 请求管理
│   ├── 请求历史记录
│   └── 搜索
├── UA分析
│   ├── User-Agent 解析（浏览器、引擎、操作系统、设备类型/品牌/型号等）
│   ├── 识别移动端 / 爬虫 Bot
│   ├── 预设 UA 快速选择（Chrome、Firefox、Safari、Edge、微信内置浏览器、curl 等）
│   ├── 粘贴 / 清空
│   └── 历史记录
├── 编码转换
│   ├── Native->Unicode
│   ├── Unicode->Native
│   ├── URL编码/解码
│   ├── Native->十六进制
│   ├── 十六进制->Native
│   ├── Native->ASCII（十进制/十六进制字符码）
│   ├── ASCII->Native
│   └── 历史记录
├── 二维码
│   ├── 二维码生成
│   │   ├── 尺寸自定义
│   │   ├── 纠错等级自定义
│   │   └── logo自定义
│   ├── 二维码解析
│   ├── 从剪贴板识别
│   └── 历史记录
├── 加解密/随机
│   ├── 支持国密 SM2 / SM3 / SM4
│   ├── 对称加密/解密
│   │   ├── AES
│   │   ├── DES
│   │   └── SM4
│   ├── 非对称加密/解密
│   │   ├── RSA
│   │   └── SM2（加密/解密、私钥签名、公钥验签）
│   ├── 摘要算法（文件/文本摘要）
│   │   ├── MD5
│   │   ├── SHA1
│   │   ├── SHA256
│   │   ├── SHA384
│   │   ├── SHA512
│   │   └── SM3
│   ├── Base64编码/解码
│   ├── Base32编码/解码
│   ├── 随机UUID生成
│   ├── 随机生成只包含数字/字母/数字字母的字符串，位数自定义
│   ├── 随机生成复杂密码，位数自定义
│   └── 历史记录
├── 计算
│   ├── 四则运算
│   ├── 进制转换
│   ├── 最大公约数
│   ├── 最小公倍数
│   ├── 排列组合数
│   └── 历史记录
├── 网络/IP
│   ├── IP查询
│   ├── 域名查询
│   ├── netstat
│   ├── ping
│   ├── ipv4-Long互相转换
│   ├── WHOIS 查询
│   └── 刷新DNS
├── 调色板
│   ├── 主题颜色/标准颜色
│   ├── 屏幕取色器
│   ├── 自由选色
│   ├── 颜色格式转换
│   ├── 颜色收藏
│   ├── 颜色混合计算（取反、相交、相加、差值、平均）
│   └── 历史记录
├── 图片助手
│   ├── 本地图床
│   ├── 截图
│   ├── 从剪贴板获取 / 复制到剪贴板
│   ├── 图片缩放工具栏（放大/缩小/原始尺寸/适应窗口）
│   ├── 图片Base64编码/解码
│   ├── 图片压缩
│   ├── 图片加水印
│   └── 图片OCR识别（基于 Tesseract）
├── Cron
│   ├── Cron表达式生成
│   ├── Cron表达式解析（支持 Linux 5 段 / Quartz 6、7 段）
│   ├── Cron表达式校验
│   ├── Cron 转自然语言
│   ├── 最近 10 次运行时间
│   ├── Cron表达式收藏
│   ├── 历史记录
│   └── 常用Cron表达式
├── 正则
│   ├── 正则表达式匹配测试
│   ├── 收藏正则表达式
│   ├── 常用正则表达式
│   └── 历史记录
├── Java
│   ├── Java/groovy代码格式化、高亮
│   ├── Java/groovy代码解释执行
│   └── 历史记录
├── 格式化
│   ├── 上传文件格式化
│   │   ├── Nginx 配置文件
│   │   ├── XML
│   │   ├── HTML
│   │   └── Java
│   ├── 粘贴文本直接格式化（Nginx / Java / XML / HTML）
│   └── 历史记录
├── PDF
│   ├── PDF拆分
│   └── PDF合并
├── 环境变量
│   ├── 系统环境变量（表格浏览）
│   ├── Java properties
│   └── 刷新 / 导出
├── 系统信息
│   ├── 基于 OSHI 采集本机系统与硬件信息，首次进入 Tab 或点击刷新时按需加载：
│   ├── 系统（操作系统、计算机、固件、主板等）
│   ├── 处理器
│   ├── 内存
│   ├── 存储
│   └── 网络
├── 配置文件转换
│   ├── Properties->YAML
│   ├── YAML->Properties
│   ├── YAML 校验（语法校验、错误行号定位）
│   ├── YAML 格式化
│   ├── 历史记录
│   ├── JSON->YAML（TODO）
│   └── YAML->JSON（TODO）
├── 文本对比
│   ├── 并排对比（左右滚动同步）
│   ├── 统一差异
│   └── 复制差异
├── Protobuf
│   ├── JSON ↔ Protobuf 二进制互转
│   │   ├── 支持 Hex / Base64 输出
│   │   └── `.proto` 定义格式化
│   ├── Wire Format 解码（无需 `.proto` 定义）
│   ├── Hex / Base64 互转
│   └── 历史记录
└── 应用与设置
    ├── 同步和备份（Git 同步、数据导出）
    ├── 快捷键说明
    ├── 数据文件位置自定义
    ├── 启动时自动检查更新
    ├── SQL 方言设置
    ├── 系统托盘
    ├── 窗口行为
    │   ├── macOS / Windows：点击关闭按钮时隐藏到 Dock / 任务栏，应用继续在后台运行
    │   └── Linux：点击关闭按钮退出应用
    ├── 外观
    │   ├── 多主题风格（Flat Light/Dark、macOS、One Dark、Monokai 等）
    │   ├── 强调色
    │   ├── 主题颜色跟随系统
    │   ├── 窗口颜色沉浸式
    │   ├── 默认最大化窗口
    │   └── 功能 Tab 仅图标模式
    └── 使用习惯
        ├── 功能面板位置（菜单栏上/下/左/右）
        └── 全局字体与字号
```

## 特别感谢

[Hutool](http://hutool.cn/)  
[FlatLaf](https://github.com/JFormDesigner/FlatLaf)  
[vscode-icons](https://github.com/microsoft/vscode-icons)  
[iconfont](https://www.iconfont.cn/)

## 开发温馨提示
最低JDK版本要求：**21**  
在你开始开发之前, **请按下图设置IntelliJ IDEA**, 然后 **maven clean**:
![considerations](assets/material/gui_build.png)

### 打包与 CI

项目现在支持把打包 JDK 下载并缓存到仓库本地目录：

- JDK 压缩包缓存：`downloads/jdks/`
- 解压后的 JDK：`jdks/<os>/<arch>/home`

下载脚本默认使用 Eclipse Temurin 21，并且如果本地已经存在对应 JDK，就不会重复下载。

#### 先准备本地打包 JDK

```bash
python3 scripts/prepare_jdks.py --targets mac-x64
python3 scripts/prepare_jdks.py --targets mac-arm64
python3 scripts/prepare_jdks.py --targets windows-x64
python3 scripts/prepare_jdks.py --targets linux-x64
```

也可以一次性查看全部目标会下载到哪里：

```bash
python3 scripts/prepare_jdks.py --targets all --resolve-only
```

#### 本地打包命令

默认 `mvn clean package` 仍然会使用当前运行 Maven 的 JDK 打一个 macOS universal 包。

对于 `mac-intel`、`mac-apple-silicon`、`windows-x64`、`linux-x64` 这几个 profile，Maven 会在 `validate` 阶段先检查 `jdks/` 下是否已经准备好对应 JDK；如果缺失，会直接失败并提示先执行 `scripts/prepare_jdks.py`，避免打出“假成功”的安装包。

如果要使用仓库内缓存 JDK 打指定平台包：

```bash
mvn clean package -Pmac-intel -Dmaven.test.skip=true
mvn clean package -Pmac-apple-silicon -Dmaven.test.skip=true
mvn clean package -Pwindows-x64 -Dmaven.test.skip=true
mvn clean package -Plinux-x64 -Dmaven.test.skip=true
```

对应产物目录：

- 默认包：`target/`
- Intel Mac：`target/mac-intel/`
- Apple Silicon Mac：`target/mac-apple-silicon/`
- Windows x64：`target/windows-x64/`
- Linux x64：`target/linux-x64/`

#### GitHub Actions

仓库内新增了工作流：`.github/workflows/build-installers.yml`

> 建议在对应原生 runner 上产出对应平台安装包：mac 安装包在 macOS runner，Windows 安装包在 Windows runner，Linux 安装包在 Linux runner。

特点：

- 支持 `workflow_dispatch`
- 推送 `v*` 标签时自动执行
- 推送 `v*` 标签时，默认在 GitHub Hosted runner 上打包：
  - `macos-14`：`mac-apple-silicon`
  - `windows-latest`：`windows-x64`
  - `ubuntu-latest`：`linux-x64`
- `mac-intel` 改为单独手动触发，并使用 `self-hosted`, `macOS`, `X64` 标签的自托管 runner，避免长期卡在 `macos-13` 队列上
- 使用 `actions/cache` 缓存 `downloads/jdks/` 和 `jdks/`
- 每个 job 会把产物重命名为统一格式后再上传，例如：`MooTool-1.7.0-mac-intel.dmg`、`MooTool-1.7.0-windows-x64.zip`
- Actions Summary 会列出“原始文件名 -> Release 文件名”的对照表，方便核对每个平台实际产物
- 推送 `v*` 标签时，会自动创建或更新对应 GitHub Release，并上传构建出的安装包附件

手动触发 `Build installers` 时，可以在页面中选择 `target`：

- `all`：运行 Hosted 平台构建，并额外尝试运行自托管的 `mac-intel`
- `mac-intel`：仅在自托管 Intel Mac runner 上打包
- `mac-apple-silicon` / `windows-x64` / `linux-x64`：只跑对应 Hosted 平台

如果手动运行时还填写了 `release_tag`（例如 `v1.7.0`），那么本次运行成功产出的安装包会在任务结束后自动追加上传到这个已有的 GitHub Release，适合在正式发布完成后再单独补齐 `mac-intel` 产物。

如果要支持 `mac-intel`，需要先准备一台 Intel Mac，并把 GitHub Actions Runner 注册为仓库级自托管 runner，标签至少包含：

- `self-hosted`
- `macOS`
- `X64`