启动游戏时 Classpath 不会按照 JSON 顺序写入
检查项
- [x] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一 Bug 未被提交过。
描述
之前在 #3004 提到,尝试使用官方安装器安装并使用 PCL 启动 Cleanroom 0.2.4,会发现无法正常启动,这是因为 Cleanroom 要求将其 JAR 文件放在 Classpath 第一位。
事实上在 JSON 文件里也确实是这么写的,但 PCL 并未按照这个顺序读取。
重现步骤
同上,使用 Cleanroom 官方安装器安装并启动该核心。
理论上其他对 Classpath 顺序有要求的 Modded 核心也有该问题。
日志与附件
补上了核心 JSON 与错误报告,cc @LTCatt ?
我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?
我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?
看看官启命令行。
我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?
Cleanroom 0.2.4 通过这个操作可以启动,但 0.3.0 目前似乎只有 MMC 能开 Orz
HMCL已经通过https://github.com/HMCL-dev/HMCL/pull/3547#issuecomment-2928920671 修复了Cleanroom 0.3.0以上版本的启动问题,希望对修复这个有帮助
HMCL已经通过HMCL-dev/HMCL#3547 (comment) 修复了Cleanroom 0.3.0以上版本的启动问题,希望对修复这个有帮助
兼容 MultiMC 整合包可不是一个 小 更改
我倾向于将其归入 #3003 …… 除非这还导致了其他某种客户端启动失败(
如果多个 jar 包中含有相同的类,Java 8 和之前的版本按照 -cp 指定的顺序选择第一个。GTNH 的 Java 8 版本曾通过这一手段来完成对 Forge 的修改。
如果 PCL2 依然认为启动游戏时 Classpath 不应按照 JSON 顺序写入,用户甚至无法启动由 HMCL 转义后的 GTNH。 请三思而后行。
如果不止 Cleanroom 会遇到这个问题那我就 Reopen 了 =。=
近期开发时发现这个问题比较诡异,有的时候是完全按照 JSON 顺序写入,有的时候则不会。
目前还没摸出来规律。
umm 这是对 inheritsFrom 字段的处理导致的,PCL 用 原版JSON.JsonObject.Merge(当前版本JSON) 来合并 JSON,导致当前版本的 libraries 会被放到原版 libraries 后面。
现在换回来了,当前版本的 libraries 会固定放到原版 libraries 前面,但不确定这会不会导致其他使用 inheritsFrom 字段的版本出现问题……(