Horizon-QA JVM 系统属性
基本信息
| 属性 | 值 |
|---|---|
| 所属模组 | Horizon-QA(modid horizonqa) |
| 入口类 | com.gtnewhorizons.horizonqa.HorizonQAProperties |
| 属性前缀 | horizonqa. |
| 读取位置 | com.gtnewhorizons.horizonqa.HorizonQAProperties.java:32(PARSED = parse(),类加载时一次性解析) |
| 属性数量 | 13 |
[!NOTE] 全部通过 JVM
-D传入,例如-Dhorizonqa.mode=ci。不是 Forge 配置文件项。
功能
Horizon-QA 的行为开关全部是 JVM 系统属性。HorizonQAProperties 在类加载时调用 parse() 解析一次,
结果存入静态 PARSED 记录,后续所有读取都是访问该不可变快照(HorizonQAProperties.java:32)。
解析器同时收集 PropertyIssue 列表,CommonProxy.preInit 会把致命问题打到日志
(CommonProxy.java:41-55)。
运行模式
-Dhorizonqa.mode 接受三个小写字面量,由 parseMode() 解析(HorizonQAProperties.java:400-422):
| 取值 | 枚举 | 效果 |
|---|---|---|
off |
Mode.OFF |
isOff() 为真,服务端启动时直接返回,测试发现与指令注册全部跳过(CommonProxy.java:99) |
interactive |
Mode.INTERACTIVE |
默认值。启用客户端可视化、Horizon Wand 编辑器、交互式指令 |
ci |
Mode.CI |
无头 CI 模式,启用自动运行、虚空世界与报告输出 |
- 枚举定义
Mode { OFF, INTERACTIVE, CI }:HorizonQAProperties.java:682-686 - 未设置时默认
interactive:parseMode在raw == null时返回Mode.INTERACTIVE(HorizonQAProperties.java:400-402) - 非法值:回退为
Mode.OFF并产生一个fatalInCi的配置问题,错误信息为Invalid -Dhorizonqa.mode=<值> (expected one of: off, interactive, ci)(HorizonQAProperties.java:415-421)
全部属性
| 属性名 | 解析函数 | 默认值 | 说明 |
|---|---|---|---|
horizonqa.mode |
parseMode |
interactive |
运行模式,见上表 |
horizonqa.world |
parseWorldPolicy |
ci 时为 void,否则 normal |
世界策略,WorldPolicy { VOID, NORMAL }(HorizonQAProperties.java:688-691) |
horizonqa.autoRun |
defaultAutoRun |
ci 为 true,否则 false |
服务端启动时自动开跑 |
horizonqa.stopServer |
defaultStopServer |
mode == CI && autoRun |
跑完后自动关服并以退出码结束进程 |
horizonqa.turbo |
parseTurboMultiplier |
1 |
每游戏 tick 内的服务端 tick 倍率,有效范围 1–100(MAX_TURBO_MULTIPLIER,HorizonQAProperties.java:29);由 MixinMinecraftServer 重定向 MinecraftServer.tick() 生效 |
horizonqa.gridOrigin |
— | 0,64,0 |
测试网格原点(DEFAULT_GRID_ORIGIN,HorizonQAProperties.java:30) |
horizonqa.tests |
— | 空 | 测试选择器列表;selectsAllTests() 为真时运行全部 |
horizonqa.allowNoTests |
— | false | 允许选中测试为空而不报基础设施错误(CommonProxy.java:112-118) |
horizonqa.allowLegacyNumericItemIds |
— | false | 放行结构数据中的数字 ItemStack ID;仅在 interactive 模式的 /horizonqa load 迁移时生效,测试执行始终严格(CommonProxy.java:56-67,HybridStructureLoader.java:50-56) |
horizonqa.reportFile |
parsePathProperty |
— | JUnit XML 报告完整路径 |
horizonqa.reportDir |
parsePathProperty |
— | 报告目录;设置后两个报告的默认文件名落在其下 |
horizonqa.statusFile |
parsePathProperty |
— | 状态 JSON 报告完整路径 |
horizonqa.events |
parseEvents |
true |
是否记录测试事件日志(HorizonQAProperties.java:646-649) |
属性名常量集中定义于 HorizonQAProperties.java:13-25。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 属性总数 | 13 | HorizonQAProperties.java:13-25 |
| 默认模式 | interactive |
HorizonQAProperties.java:400-402 |
| turbo 最小值 / 最大值 | 1 / 100 | HorizonQAProperties.java:29、443-445 |
| turbo 默认值 | 1 | HorizonQAProperties.java:436-438 |
| 网格默认原点 | 0, 64, 0 |
HorizonQAProperties.java:30 |
| JUnit 报告默认文件名 | TEST-horizonqa.xml |
HorizonQAProperties.java:27 |
| 状态报告默认文件名 | horizonqa-result.json |
HorizonQAProperties.java:28 |
| 模式枚举值数 | 3(OFF / INTERACTIVE / CI) |
HorizonQAProperties.java:682-686 |
| 世界策略枚举值数 | 2(VOID / NORMAL) |
HorizonQAProperties.java:688-691 |
报告路径解析优先级(HorizonQAProperties.java:200-227):显式 reportFile / statusFile 优先;
其次 reportDir + 默认文件名;最后默认文件名落在服务器工作目录下。
交互
Forge 配置文件由 event.getSuggestedConfigurationFile() 提供给 Config.synchronizeConfiguration
(CommonProxy.java:37),但 Config.java 中只有一个 greeting 字符串项
(Config.java:13),启动时被打到日志(CommonProxy.java:39)。所有实质开关都在上表的 -D 属性里。
preInit 还会按当前属性打印一行解析摘要:世界策略、autoRun、stopServer、turbo、网格原点、
交互特性开关(CommonProxy.java:42-50)。
相关条目
- /horizonqa 指令 - 各子指令在 interactive 与 ci 模式下的可用性差异由上表模式决定
- Horizon Wand - 交互式可视化功能仅在
interactive模式启用