# web应用开发工具包 **Repository Path**: AJiangS/web-dev-toolkit ## Basic Information - **Project Name**: web应用开发工具包 - **Description**: 用go语言写的一个javaweb开发的工具包,包括dk、maven、mysql、redis - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-09 - **Last Updated**: 2026-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Web Dev Toolkit 基于 **Go 1.25 + Wails v2 + Vue 3** 的桌面应用,一站式管理 **Git / Maven + JDK / MySQL / Redis** 开发环境。 --- ## 主要功能 - **4 类工具卡片**:Git、Maven + JDK、MySQL、Redis,每类以独立卡片(ToolRow)形式展示 - **按需下载**:首次启动只强制下载 MinGit;其他工具可在对应卡片上按需下载;工具名下方显示「已下载 / 未下载」状态标签 - **重新安装**:任何工具下载失败或环境损坏时,在工具行上**右键 → 重新安装**即可重下(先清理旧目录) - **打开目录**:右键 → 打开目录,或(在旧版 UI 中)直接跳转安装目录 - **Git Bash 补下载**:Git 已下载但缺失 `git-bash.exe` 时,Git 卡片上会显示蓝色「下载 Git Bash」按钮,一键补齐 - **Git 右键菜单(资源管理器)**:Git Bash 就绪后,可一键注册 / 取消 Windows 资源管理器右键「在此处打开 Git Bash」菜单(HKCU 注册表) - **Maven + JDK**:支持 JDK 17 / 21 / 25 三个版本下拉切换;每个 JDK 版本可**独立注册 / 取消** Windows 资源管理器右键「Maven Bash Here (JDK XX)」菜单,点击后打开**原生 CMD 黑窗口**(自动设置 `JAVA_HOME` / `MAVEN_HOME` / `PATH` 并停留),可直接运行 `java` / `mvn` 命令;菜单项互不覆盖;中文路径下自动创建纯 ASCII junction 避免乱码 - **MySQL / Redis 服务管理**:卡片上一键启动 / 停止服务,运行状态每 3 秒自动刷新,运行中显示实时端口号 - **端口冲突自动切换**:MySQL 默认 3306,Redis 默认 6379;被占用时自动依次尝试下一端口(最多 5 次) - **下载进度展示**:下载中显示百分比 + 已下载大小 + 实时速度 + 剩余 ETA,均为文字提示,无进度条 UI - **运行日志查看**:标题栏右上角「日志」按钮打开日志查看器,按日期自动轮转(app-YYYY-MM-DD.log,5 MB × 5 份) - **整体可移植**:所有工具路径以 exe 所在目录为基准,`tools/` 可整体搬运到其他盘 ## 项目结构 ``` web-dev-toolkit/ ├── app/ # Go 后端(按职责拆分,单文件 <300 行) │ ├── app.go # Wails 方法绑定 + App 结构体 │ ├── contextmenu.go # Git Bash 右键菜单(HKCU 注册表) │ ├── downloader.go # 下载源常量 + 全局 HTTP 连接池 │ ├── downloader_gitbash.go # Git Bash 下载/解压(tar.bz2) │ ├── downloader_helpers.go # HTTP 下载通用工具 + 解压辅助 │ ├── downloader_jdk.go # Microsoft OpenJDK 下载(17/21/25) │ ├── downloader_maven.go # Maven 下载 + bundle info.json │ ├── downloader_mingit.go # MinGit 下载(首次启动必下) │ ├── downloader_mysql.go # MySQL 下载(官方 CDN + 断点续传) │ ├── downloader_redis.go # Redis 下载(Gitee git clone) │ ├── launcher.go # 对外启动方法分发 │ ├── launcher_bundle.go # Maven+JDK 终端启动 + wdtoolkit-start.bat │ ├── launcher_misc.go # Git Bash 启动、通用 ASCII junction、进程辅助 │ ├── launcher_mysql.go # MySQL 启停(initialize/端口重试/优雅关闭) │ ├── launcher_redis.go # Redis 启停(端口重试/PID 文件/动态 conf) │ ├── logger.go # 日志(lumberjack 轮转 + 级别封装) │ ├── tool_manager.go # 工具自动扫描 / 分类 / 状态检测 │ └── types.go # 共享结构体与常量 ├── frontend/ # Vue 3 前端 │ └── src/ │ ├── App.vue # 主视图:下载状态/工具列表/欢迎页/进度事件 │ ├── components/ │ │ ├── TitleBar.vue # 标题栏 + 日志按钮 │ │ ├── ToolRow.vue # 单工具卡片(版本/状态/主操作/右键菜单) │ │ └── LogViewer.vue # 日志查看器(按日期切换) │ ├── main.js # Vue 挂载入口 │ └── style.css # 全局样式 ├── build/ │ ├── bin/WebDevToolkit.exe # 生产构建产物 │ └── icons/ # 应用图标 ├── logs/ # 运行日志(首次运行时自动创建) ├── tools/ # 工具目录(首次启动下载后生成) │ ├── git/ # Git:MinGit + 完整 Git for Windows │ │ ├── cmd/git.exe # MinGit 命令行 │ │ └── mingw64/bin/git-bash.exe # 完整 Git Bash │ ├── maven-jdk17/ # JDK 17 + Maven 3.9 │ ├── maven-jdk21/ # JDK 21 + Maven 3.9 │ ├── maven-jdk25/ # JDK 25 + Maven 3.9 │ ├── mysql-8.0.46/ # MySQL 8.0.46 │ │ └── .wdtoolkit-mysql-port # 运行时状态文件(PID + 端口) │ └── redis-8.6.2/ # Redis 8.6.2 │ └── .wdtoolkit-redis.conf # 运行时生成的动态端口配置 ├── main.go # Wails 入口 ├── go.mod ├── wails.json # Wails 构建配置 └── README.md ``` ## 开发环境要求 - **Go 1.22+**(建议 1.25)— - **Wails CLI v2** — `go install github.com/wailsapp/wails/v2/cmd/wails@latest` - **Node.js 18+** — 构建前端 - **Windows 10/11 x64** — 运行环境(平台绑定代码:进程隐藏/Windows 注册表/`%~dp0` 批处理等) ## 开发与构建 ```powershell wails dev # 开发模式(Go + Vue 热更新,自动打开 WebView2 窗口) wails build # 生产构建 → build/bin/WebDevToolkit.exe ``` > **重要:不要用 `go build` 直接生成 exe。** > > Wails 应用依赖 Wails CLI 注入 build tag、前端资源打包、WebView2 loader 等步骤。直接 `go build -o WebDevToolkit.exe .` 编译出的 exe **启动即会弹窗**: > ``` > Wails applications will not build without the correct build tags. > Please use "wails build" or press "OK" to open the documentation > ``` > 修复方式:在项目根目录运行一次 `wails build`(输出 `build/bin/WebDevToolkit.exe`),用这个产物运行即可。`wails build` 同时会触发前端 `npm run build` 并把 `frontend/dist/` 嵌入 Go `embed.FS`。 ## 最终用户使用流程 ### 1. 放置 exe 将 `WebDevToolkit.exe` 放到要安装工具的目录(建议放到空目录,例如 `D:\Web Dev Toolkit\`),程序只使用 exe 所在目录下的 `tools/` 和 `logs/`,不会写到其他位置。 ### 2. 首次启动:下载 MinGit 1. 双击 exe。没有 `tools/` 或 `tools/git/` 时显示欢迎页 2. 点击「一键下载 MinGit」→ 从 npmmirror 国内镜像下载 MinGit(约 44 MB) 3. MinGit 下载完成后进入工具列表视图 ### 3. 按需下载其他工具 进入工具列表视图后: - 工具名下方会显示「未下载」或「已下载」标签 - 未下载的工具:卡片右侧显示橙色「下载」按钮 - 已下载的工具:卡片右侧显示主操作按钮(启动 / 停止 / 添加右键菜单 等) - Maven + JDK 卡片可在 17 / 21 / 25 之间下拉切换版本,每个版本独立下载 / 独立启动 - Git 卡片若已下载但缺少 Git Bash,会显示蓝色「下载 Git Bash」按钮(补齐约 100 MB) ### 4. 右键菜单(每一行工具) 在**已下载且非下载中**的工具行上**右键点击**,弹出上下文菜单: | 菜单项 | 作用 | |---|---| | 重新安装 | 删除旧目录 → 重新下载该工具。用于下载中断、文件损坏、环境异常 | | 打开目录 | 在资源管理器中打开该工具的安装目录 | > 右键菜单会自动避开视口右下边界;点击空白处 / 按 ESC / 滚动页面均会自动关闭。 ### 默认账号与密码(速查表) | 服务 | 用户名 | 密码 | 备注 | |---|---|---|---| | **MySQL 8.0.46** | `root` | `root` | 首次 `--initialize-insecure` 初始化后通过 `--init-file` 写入;仅允许 localhost 连接 | | **Redis 8.6.2** | *(无)* | *(无)* | 默认未启用 `requirepass`;本机开发使用,不对外监听。如需密码,手动在 `redis-8.6.2/redis.conf` 中设置 `requirepass ` 即可 | ### 5. 快速故障排查 - **双击 exe 弹出 "Wails applications will not build without the correct build tags" 对话框**: - 原因:构建时用了普通 `go build`,缺少 Wails 注入的 build tag / WebView2 loader / 前端资源。 - 修复:在项目根目录重新运行 `wails build`,使用输出的 `build/bin/WebDevToolkit.exe`。**永远不要用 `go build -o WebDevToolkit.exe .` 直接打包。** - **MySQL 启动报 initialize 失败(exit status 1)**:若之前首次启动时端口被占用导致 `data/` 残留,手动删除 `mysql-8.0.46/data/` 再重新启动;或直接右键 MySQL → 重新安装。 - **MySQL 启动报错"所有端口尝试失败" / mysqld 点启动后立即死亡(<1s 就停止)**: - 看 `build/bin/logs/app-YYYY-MM-DD.log` 里的 `stderr 末 20 行`: - 若出现 `Can't find error-message file 'C:\share\errmsg.sys'` / `Can't create test file C:\data\...` → 说明中文路径下 `--basedir`/`--datadir` 丢了(v1.0.0 修复:启动参数统一转 `/` 斜杠并在代码中强制传参),请**右键 MySQL → 重新安装**(会清掉旧 data 目录)。 - 若只有 `OS errno 183` / `data directory has files in it` → `data/` 目录残留空文件导致 initialize 失败,手动删 `mysql-8.0.46/data/` 后重启即可。 - **MySQL 下载特别慢**:官方 CDN 国内速度 50–300 KB/s 属正常现象;下载中断后再点"重新安装"会断点续传,不会从头下。希望更快可以其他机器下载好 `mysql-8.0.46-winx64.zip` 解压后把目录命名为 `mysql-8.0.46` 直接放入 `tools/`。 - **Redis 下载弹出黑窗口**:v1 版本修复,新版已在 git clone 进程上设置 `CREATE_NO_WINDOW`,后台静默拉取。 - **Git 卡片只有"下载 Git Bash"没有右键菜单按钮**:说明 Git Bash 还没装好,先点"下载 Git Bash",装完自动出现右键菜单按钮。 - **"添加右键菜单"失败提示未找到 git-bash.exe**:v1 版本修复,新版在首次完整 Git 下载失败后会显示蓝色"下载 Git Bash"补齐按钮,不再阻塞。 - **同时注册了多个 JDK 版本的 Maven Bash Here,右键菜单里出现多个 "Maven Bash Here (JDK XX)" 怎么办?**:这是**预期行为**,每个菜单项对应一个独立的 JDK 版本。要移除不用的版本,在应用中 Maven+JDK 卡片下拉选中对应版本 → 点「取消右键菜单」即可,只删该版本,不会影响其他版本。 - **右键菜单点击后黑窗口一闪就关 / "Windows 找不到文件 'C:\Users\濮溺鐵\...'"**: - **一闪就关**:旧版 bat 末尾没有 `cmd /K`,注册表用 `cmd /c` 执行完即关。修复:bat 末尾追加 `cmd /K` + 注册表改为 `cmd /c start "" cmd /K call bat "%V"` 双重保险停留。**需在应用里先「取消右键菜单」再「添加右键菜单」让新注册表条目生效**。 - **中文路径乱码(濮溺鐵)**:资源管理器 shell 执行注册表 command 时中文路径编码异常。修复:所有写入注册表的路径先经 `ensureAsciiJunctionFor` 创建纯 ASCII NTFS junction(如 `C:\ProgramData\WebDevToolkit\git_`),注册表只存 ASCII 路径,彻底避免乱码。同样**需重新添加右键菜单**才能让旧的乱码条目被替换。 - **Maven Bash Here 点击后黑窗口打开了,但 `mvn` 命令提示"不是内部或外部命令"**: - 检查 Maven 是否已下载完成(Maven+JDK 卡片显示「已下载」标签) - 检查 `tools/maven-jdkXX/maven/` 目录下是否有 `bin/mvn.cmd` 文件 - 如果文件缺失,右键 Maven+JDK 工具行 → 「重新安装」 ## 下载源与大小一览 | 工具 | 下载来源 | 大小 | 备注 | |---|---|---|---| | MinGit | npmmirror(国内镜像) | ~44 MB | 首次启动强制下载;用于 Redis 克隆 + Git Bash 下载后合并 | | Git Bash(完整 Git for Windows) | npmmirror(国内镜像) | ~100 MB | tar.bz2 格式,下载后合并到 `tools/git/` | | Maven 3.9.16 | 清华大学 Apache 镜像 | ~10 MB | 每个 Maven+JDK bundle 各自拷贝一份 maven/ | | JDK 17 / 21 / 25 | Microsoft OpenJDK(aka.ms 短链) | 140–190 MB | 随 JDK 版本不同略有差异 | | MySQL 8.0.46 | MySQL 官方 CDN(cdn.mysql.com) | ~237 MB | 国内高校镜像因版权原因均无镜像;支持断点续传 | | Redis 8.6.2 | Gitee `git clone`(浅克隆) | ~3 MB | `--depth 1` 浅克隆;后台无窗口 | > **国内镜像现状说明**:清华 / 中科大 / 华为 / 阿里 / 腾讯 / 搜狐等高校/企业镜像均因版权/合规原因已移除 MySQL Downloads 目录,仅保留 yum/apt 仓库。因此 MySQL 只能走官方 CDN。 ## 各工具操作详解 ### Git | 场景 | 主按钮 | |---|---| | MinGit 未下载 | 欢迎页一键下载 | | MinGit 已下载,**缺少 Git Bash** | 蓝色「下载 Git Bash」按钮 | | Git Bash 已就绪 | 「添加右键菜单 / 取消右键菜单」切换 Windows 资源管理器右键菜单 | Git 组合包结构:MinGit 提供 git 命令行(用于 clone Redis、下载其他 Git 包);完整 Git for Windows 提供 `git-bash.exe` 终端。 ### Maven + JDK - 版本下拉:JDK 17 / 21 / 25 各自独立,每个版本**单独下载 / 单独管理右键菜单** - 未下载 → 橙色「下载」按钮 - 已下载 → 「添加右键菜单 / 取消右键菜单」按钮(按当前下拉选中的 JDK 版本独立操作) - 终端使用 `%~dp0` 相对路径,`tools/` 整体搬迁后依然可直接启动 #### 多版本 Maven Bash Here 右键菜单(冲突解决方案) 每个 JDK 版本使用**独立的注册表键 + 独立的启动脚本**,在资源管理器右键菜单中同时出现且互不覆盖: | 注册的 JDK 版本 | 注册表键(HKCU) | 右键显示菜单名 | 启动脚本(bundle 目录内) | |---|---|---|---| | JDK 17 | `MavenHereJdk17` | **Maven Bash Here (JDK 17)** | `wdtoolkit-maven-here-jdk17.bat` | | JDK 21 | `MavenHereJdk21` | **Maven Bash Here (JDK 21)** | `wdtoolkit-maven-here-jdk21.bat` | | JDK 25 | `MavenHereJdk25` | **Maven Bash Here (JDK 25)** | `wdtoolkit-maven-here-jdk25.bat` | **点击后会发生什么**: 1. Windows 资源管理器通过注册表 `command` 值启动一个**独立的 CMD 黑窗口** 2. 黑窗口中执行对应版本的 `wdtoolkit-maven-here-jdkXX.bat`: - `chcp 65001` 切换到 UTF-8 代码页(避免 `java -version` 中文乱码) - `set JAVA_HOME=%~dp0jdk\xxx`(指向该版本的 JDK) - `set MAVEN_HOME=%~dp0maven\xxx` - `set PATH=%JAVA_HOME%\bin;%MAVEN_HOME%\bin;%SystemRoot%\system32;%SystemRoot%` - `cd /d "%~1"` 切到你右键所在的目录 - 输出环境就绪提示后,执行 `cmd /K` **停留在交互式终端** 3. 此时黑窗口不会关闭,光标等待你输入命令,直接敲 `java -version` / `mvn -version` 即可看到对应版本 **注册表 command 结构**(双重保险停留): ``` cmd /c start "" cmd /K call "ASCII路径\xxx.bat" "%V" ``` - 外层 `cmd /c`:一次性启动后退出,不残留 - `start ""`:新开独立黑窗口(空标题避免路径被当标题吞掉) - 内层 `cmd /K call bat "%V"`:执行 bat 并在结束后保持交互 **使用方式**: 1. 在 Maven+JDK 卡片的版本下拉中选中目标 JDK 版本(例如 JDK 21) 2. 点击「添加右键菜单」→ 注册表写入 `MavenHereJdk21`,脚本写入 `tools/maven-jdk21/wdtoolkit-maven-here-jdk21.bat` 3. 在资源管理器任意目录**空白处右键**或**右键点击文件夹**,即可看到对应菜单项 4. 点击后弹出黑窗口,自动设置好 `JAVA_HOME` / `MAVEN_HOME` / `PATH` 并停留,可直接运行 `java -version` / `mvn -version` 5. 需要切换到其他 JDK 版本时:在下拉中选另一个版本 → 同样点「添加右键菜单」即可,不会覆盖旧菜单;要移除某版本菜单,选中该版本后点「取消右键菜单」 > **注意**:Maven Bash Here 打开的是**原生 CMD 黑窗口**(非 Git Bash),仅用于运行 `java` / `javac` / `mvn` 等 Java/Maven 命令,不依赖 Git Bash。 #### 中文路径乱码问题(ASCII Junction 方案) 当 `WebDevToolkit.exe` 放在含中文的路径下(如 `C:\Users\姜少臣\...`)时,Windows 资源管理器 shell 执行注册表 `command` 中的中文路径会出现编码乱码(如 `姜少臣` 被错误解析成 `濮溺鐵`),导致"Windows 找不到文件"错误。 **解决方案**:所有写入注册表的路径(`git-bash.exe` / `xxx.bat`)都会先经过 `ensureAsciiJunctionFor` 函数([launcher_misc.go](file:///c:/Users/姜少臣/Desktop/PortableGit/web-dev-toolkit/app/launcher_misc.go#L88-L155)),创建一条纯 ASCII 的 NTFS 目录联接(junction)指向真实中文路径: | 工具 | junction 名称前缀 | 示例 junction 路径 | |---|---|---| | Git | `git_` | `C:\ProgramData\WebDevToolkit\git_abcd1234` | | MySQL | `mysql80_` | `C:\ProgramData\WebDevToolkit\mysql80_abcd1234` | | Maven+JDK 17 | `mvnjdk17_` | `C:\ProgramData\WebDevToolkit\mvnjdk17_abcd1234` | | Maven+JDK 21 | `mvnjdk21_` | `C:\ProgramData\WebDevToolkit\mvnjdk21_abcd1234` | | Maven+JDK 25 | `mvnjdk25_` | `C:\ProgramData\WebDevToolkit\mvnjdk25_abcd1234` | 注册表中写入的路径全部是纯 ASCII 的 junction 路径,资源管理器执行时不会出现编码乱码。junction 是目录元数据,删除 junction 不会影响真实目录的内容。 ### MySQL - **启动流程**(全部在 [launcher_mysql.go](file:///c:/Users/姜少臣/Desktop/PortableGit/web-dev-toolkit/app/launcher_mysql.go) 中实现): 1. **初始化前置**(端口重试循环之外执行,仅一次):若 `data/` 不存在则清到空目录,`mysqld --initialize-insecure` 初始化(`--basedir` / `--datadir` 用 `/` 斜杠传,兼容中文路径),之后通过 `--init-file` 把 root 密码设为 `root` 2. **端口尝试**:默认 3306,占用则 3307 / 3308 ... 最多 5 次;初始化只执行一次,不随端口重试重复 3. **全部端口失败自动重建**:强制清 `data/` → 重初始化 → 再做一轮端口尝试;`data/` 被其他进程锁定时会提示手动关闭后重试 4. **状态持久化**:端口 / PID 写入 `.wdtoolkit-runtime.json`,停止时用 `mysqladmin -P -uroot -proot shutdown -h 127.0.0.1` 优雅关闭 - **默认账号**:用户名 `root`,密码 `root`;仅允许 `localhost` 连接 - **连接示例**:`mysql -u root -proot -h 127.0.0.1 -P 3306`(换成实际端口) - 状态刷新:每 3 秒轮询一次,运行中卡片显示端口号 - **关键实现说明**:Windows 下 mysqld 对 `--basedir` / `--datadir` 参数通过 `GetCommandLineW()` 自行解析,遇到中文路径 + PowerShell 调试环境的反斜杠处理差异会导致参数被丢到 `C:\share\`、`C:\data\` 下从而 1 秒内死亡。代码中统一用 `toMySQLPath()`(`\` → `/`)传参,并设置 WorkingDirectory = mysqlRoot + `MYSQL_HOME` 环境变量,三重保证路径正确。 ### Redis - **启动流程**: 1. 默认端口 6379,占用则 6380 / 6381 ... 最多 5 次 2. 动态生成 `.wdtoolkit-redis.conf` 写入选定端口(其他配置继承 `redis.conf`) 3. 使用 `startDetached`(`DETACHED_PROCESS + CREATE_NO_WINDOW`)启动 redis-server.exe,不阻塞 UI - **默认账号密码**:**无密码**(`requirepass` 未启用),本机开发直接连接 - **连接示例**:`redis-cli -p 6379`(换成实际端口);或在应用代码中 `redis://127.0.0.1:6379` - **设置密码**(可选):编辑 `redis-8.6.2/redis.conf`,新增 `requirepass ` 后重启 Redis 即可生效 - **停止**:优先通过 `redis-cli -p shutdown` 优雅关闭,失败回退到按 PID 结束进程 - 状态刷新:每 3 秒轮询一次,运行中卡片显示端口号 ## HTTP 下载优化(所有 HTTP 下载受益) | 优化项 | 位置 | 效果 | |---|---|---| | **全局共享 http.Client** | [downloader.go](file:///c:/Users/姜少臣/Desktop/PortableGit/web-dev-toolkit/app/downloader.go) 的 `httpClient` | 所有请求复用 TCP 连接 + Keep-Alive,避免每次下载重新进行 TLS 握手 | | **大读写缓冲** | Transport 层 256 KB;下载循环 512 KB | 大幅减少 syscall 次数,流式下载吞吐提升 | | **断点续传 HTTP Range** | [downloader_helpers.go](file:///c:/Users/姜少臣/Desktop/PortableGit/web-dev-toolkit/app/downloader_helpers.go) `downloadFileResume` | 下载中断后再次点击会从已下载字节处追加;Range 被服务器忽略时自动回落完整下载 | | **实时速度 + ETA** | 进度事件 `Message` | 如 `正在下载 MySQL 35% (82 MB) 210 KB/s ETA 11m40s` | | **长超时 + 重定向兼容** | Client Timeout 4 小时;CheckRedirect 允许 10 次 | 慢速网络不提前断连;兼容 aka.ms / dev.mysql.com 等短链跳转 | ## 代码拆分说明 原设计中单文件 `downloader.go`(~790 行)、`launcher.go`(~686 行)过长,AI 开发容易出错。已按**职责优先**拆分: - **downloader 系列**:每类工具一个文件 + 通用 helpers + 常量文件 - **launcher 系列**:每类工具一个文件 + 通用 misc + 对外分发文件 - **辅助函数跨文件共享**:`fileExists / dirExists / copyDir / renameOrCopy / extractZip / startDetached / runHidden` 等工具函数集中在各自对应的 `*_helpers.go` / `*_misc.go` 或 `tool_manager.go` 中,跨文件直接调用(包作用域) 新增/修改下载逻辑时,按工具类型找到对应 `downloader_xxx.go` / `launcher_xxx.go` 即可,无需翻巨大的单文件。 ## 版本历史(重要修复点) - **MySQL initialize 失败(exit status 1)**:初始化在端口重试循环外执行,避免 data 目录创建后第二轮端口尝试又 `--initialize-insecure` 导致 Aborting。 - **Redis 克隆弹黑窗口**:`exec.Cmd.SysProcAttr` 设 `CREATE_NO_WINDOW`,后台静默拉取。 - **MinGit 下载进度条和百分比错位**:在 `DownloadProgress` 中新增 `StepProgress` 字段(步骤内进度 0–100),前端用 StepProgress 显示百分比。 - **缺少 Git Bash 时无下载入口**:新增 `gitBashReady` 判定 + 蓝色"下载 Git Bash"独立按钮。 - **工具行右键菜单**:原"重新安装 / 打开目录"行内下划线链接 → 改为 Teleport 到 body 的上下文菜单。 - **HTTP 下载层**:全局连接池、大缓冲、断点续传、速度/ETA 显示、长超时。 - **下载进度 UI**:移除所有进度条,只保留文字提示(速度/ETA 一目了然)。 - **多版本 JDK 右键菜单冲突**:每个 JDK 版本(17/21/25)使用独立注册表键 `MavenHereJdk{版本}` + 独立 bat 脚本 `wdtoolkit-maven-here-jdk{版本}.bat`,互不覆盖;前端状态按 `toolId` 独立存储。 - **Maven Bash Here 黑窗口一闪就关**:bat 末尾追加 `cmd /K` 停留交互式终端;注册表 command 改为 `cmd /c start "" cmd /K call bat "%V"` 双重保险,确保点击后黑窗口保持打开可输入 `java` / `mvn` 命令。 - **中文路径右键菜单乱码(濮溺鐵)**:提取通用 `ensureAsciiJunctionFor(realDir, namePrefix)` 函数到 [launcher_misc.go](file:///c:/Users/姜少臣/Desktop/PortableGit/web-dev-toolkit/app/launcher_misc.go#L88-L155),所有写入注册表的路径(Git Bash / Maven bat / MySQL)先创建纯 ASCII NTFS junction 再写入,彻底解决资源管理器 shell 执行时中文路径编码乱码问题。MySQL 专属的 `ensureAsciiJunction` / `mysqlDirCRC32` / `isASCIIPath` 已删除,统一复用通用版。 - **Maven Bash Here 改为纯 CMD 终端**:不再依赖 `git-bash.exe`,`ensureMavenBashBat` 生成原生 cmd 黑窗口脚本(`chcp 65001` + `set JAVA_HOME/MAVEN_HOME/PATH` + `cd` + `cmd /K`),仅用于运行 `java` / `mvn` 命令。