这是一个符合 xresconv-conf 规范的CLI转表工具,并且使用 xresloader 作为数据导出工具后端。
自 2.0.0 起使用 Rust 实现,提供各平台预编译二进制,不再依赖 Python 运行时。(Python 入口保留为兼容转发层,见下文。)
从 GitHub Releases 下载对应平台的预编译包:
| 平台 | 制品 |
|---|---|
| Linux x64 | xresconv-cli-<version>-x86_64-unknown-linux-gnu.tar.gz(或 -musl 静态链接版) |
| Linux arm64 | xresconv-cli-<version>-aarch64-unknown-linux-gnu.tar.gz(或 -musl 静态链接版) |
| macOS arm64 (Apple Silicon) | xresconv-cli-<version>-aarch64-apple-darwin.tar.gz |
| macOS x64 (Intel) | xresconv-cli-<version>-x86_64-apple-darwin.tar.gz |
| Windows x64 | xresconv-cli-<version>-x86_64-pc-windows-msvc.zip |
| Windows arm64 | xresconv-cli-<version>-aarch64-pc-windows-msvc.zip |
以下扩展平台在发布流水线中尽力构建(失败不阻塞发布,不保证每个版本都有产物):
Linux RISC-V 64、Android arm64、FreeBSD x64。
Windows/Linux i686、Linux ARM32 和 LoongArch 不提供预编译包;旧 Python 入口仍可通过
XRESCONV_CLI_BIN 转交用户自行提供的可执行文件。
这些平台仍需能够运行兼容的 Java/xresloader;不提供无独立 CLI/JVM 运行环境的 iOS 包。
解压后将 xresconv-cli(Windows 为 xresconv-cli.exe)放入 PATH 即可。
运行转表需要 java 可执行程序(在 PATH 中,或配置 JAVA_HOME,或用 -J 指定)。
本工具不校验也不绑定 JDK 版本;实际支持的 JDK 范围由后端 xresloader 决定。
也可以从源码构建(需要 Rust 1.88+ 工具链,最新 XML 编码依赖要求此版本):
源码中的图标、截图和二进制资源使用 Git LFS;安装 Git LFS 后,在克隆的仓库中执行:
git lfs install --local
git lfs pullcargo build --release --locked
# 二进制位于 target/release/xresconv-cliWindows 构建会将应用图标和版本信息嵌入 .exe,需要 Windows SDK 资源编译器;Linux/macOS 保持命令行程序形态。
xresconv-cli [本脚本选项]... <转换列表文件> [-- [附加xresloader选项]...]
本脚本选项:
-h, --help 帮助信息
-s, --scheme-name <要转换的scheme名称> 按scheme名称指定要转换的表
-v, --version 显示版本号并退出
-t, --test 测试模式(显示运行的脚本,不实际执行)
-p, --parallelism <number> 正整数并发上限;默认不超过2,实际性能需用自己的数据测量
-j, --java-option 转递给java的参数(可多个)。比如 -j Xmx2048m
-J, --java-path java可执行程序路径
-a, --data-version <version> 数据版本号,将写入到导出的数据文件中。传任意字符串都可以xresconv_cli.py / __main__.py / xresconv-cli.py 保留为兼容转发层:打印升级提示后把全部参数转发给 Rust 可执行文件,并透传退出码,旧流程(如 python xresconv_cli.py ...)可继续运行。二进制按以下顺序解析:
- 环境变量
XRESCONV_CLI_BIN指定的可执行文件路径;不存在时提示并继续尝试缓存/下载。 - 缓存目录中已下载的二进制(Windows 为
%LOCALAPPDATA%\xresconv-cli\bin,其他平台为${XDG_CACHE_HOME:-~/.cache}/xresconv-cli/bin)。 - 以上都缺失时,从 GitHub Releases 下载最新版本的对应平台制品(校验 sha256 后写入缓存)。
Linux x64/arm64 优先使用 musl 静态包,以兼容不同 libc 发行版。下载具有超时与大小限制,校验失败不会覆盖现有缓存; 安装使用同目录临时文件与原子替换,并发启动不会读到下载了一半的二进制。已缓存版本不会每次联网检查升级。 Python 3.14 已实测;兼容层保留旧入口的调用方式。自动测试使用 Python 3 和本地编译的 Rust 二进制。
-v/--version现在可以独立调用(原实现因 argparse 位置参数必填而无法单独使用)。- 不带参数时打印帮助并以退出码
-1退出(Unix 上表现为 255);历史 argparse 实际会在必填参数检查时以 2 退出。 - 支持
<output_type output_dir="...">属性(原实现解析了 rename/tag/class 但遗漏了 output_dir)。 - java 子进程启动失败会明确报错并计入失败数(原实现线程崩溃但失败数不增加)。
- 日志着色兼容
TERM=dumb(原实现判断的是dump)。 - 颜色模式仍由
CPRINTF_MODE环境变量控制(term/none/win32_console;win32_console映射为 ANSI 虚拟终端)。 - 拒绝非正数并发;空计划不启动 Java;失败累计不会因 Unix 退出码截断而变成成功。
- 保留 include/全局/局部选项的覆盖顺序、scheme 重复值原文、空 file/scheme 的内联规则及输出矩阵筛选。 循环 include 和超过 128 层的 include 会明确报错,不再递归至崩溃。
-J显式指定无效路径时直接报错;相对 Java 路径在切换后端工作目录前解析。 Ctrl+C/终止信号会停止并回收本次后端进程树,以 130 退出。- CLI 尾部参数保留空格边界;stdin 参数按 xresloader 实际分词协议选择单双引号。 后端无法表示的组合(例如同时包含两种引号与空格,或换行/NUL)会报错。详细合同见 迁移合同。
cargo fmt --all --check
cargo check --workspace --locked
cargo test --workspace --locked
cargo clippy --workspace --all-targets --locked -- -D warnings完整本地测试需要 Python 3 和 PowerShell 7(兼容入口/发布脚本测试),正式二进制不需要它们。
测试包含 官方 sample 契约、测试专用 fake-java、进程取消/大量输出/并发、离线下载与缓存、制品校验。
Python 入口通过 XRESCONV_CLI_BIN 指向本地 Cargo 二进制;不会下载发布版本。
fake-java 在测试独立目录内从当前源码构建,过滤测试和覆盖率运行不会复用陈旧替身。
覆盖率与测试证据见 验证记录,不将单个平台的覆盖率视为所有平台分支的完整证明。
CI 只测试本仓库的 Rust/Python 入口、仓内 fixture 和 fake-java,不下载其他仓库的 Release/JAR/sample。
Python 使用最新稳定的 3.x(Python 没有单独的 LTS 发行系列)。
常规 runner 使用 *-latest;Linux/Windows ARM 原生 runner 使用 GitHub 提供的专用标签,
macOS x64 包在 macos-latest 上构建和冒烟。
推送与 Cargo.toml 版本一致的 tag(如 v2.0.1 或 2.0.1)会触发 release.yml。
流程复用完整构建/测试门禁,检查全部 8 个核心制品及 SHA256,上传完毕后自动公开 Release。
预发布版本标记 prerelease,不替换 latest;上传失败保留草稿,已公开版本拒绝覆盖。
常规 push/PR 同样构建并保存跨平台包为 Actions artifacts,扩展平台失败不阻塞核心发布。
本地可用 pwsh -NoProfile -File scripts/release.ps1 -Mode Tag -Tag v2.0.1 检查 tag。
应用图标、多尺寸 PNG、Windows ICO 和项目横幅见 静态资源说明,包含设计、导出与 LFS 维护方法。


