PCL2 icon indicating copy to clipboard operation
PCL2 copied to clipboard

启动游戏时 Classpath 不会按照 JSON 顺序写入

Open Pigeon0v0 opened this issue 1 year ago • 4 comments

检查项

描述

之前在 #3004 提到,尝试使用官方安装器安装并使用 PCL 启动 Cleanroom 0.2.4,会发现无法正常启动,这是因为 Cleanroom 要求将其 JAR 文件放在 Classpath 第一位。

事实上在 JSON 文件里也确实是这么写的,但 PCL 并未按照这个顺序读取。

重现步骤

同上,使用 Cleanroom 官方安装器安装并启动该核心。

理论上其他对 Classpath 顺序有要求的 Modded 核心也有该问题。

日志与附件

cleanroom-0.2.4-alpha.json

错误报告-2025-3-29_下午_3.33.11.zip

Pigeon0v0 avatar Mar 28 '25 16:03 Pigeon0v0

补上了核心 JSON 与错误报告,cc @LTCatt ?

Pigeon0v0 avatar Mar 29 '25 07:03 Pigeon0v0

我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?

LTCatt avatar Apr 28 '25 16:04 LTCatt

我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?

看看官启命令行。

allMagicNB avatar Apr 29 '25 04:04 allMagicNB

我手动修改启动脚本把它的核心放到了最前面,并且指定了 Java 21,但依然无法启动,我不知道还需要做哪些修改?

Cleanroom 0.2.4 通过这个操作可以启动,但 0.3.0 目前似乎只有 MMC 能开 Orz

Pigeon0v0 avatar Apr 29 '25 14:04 Pigeon0v0

HMCL已经通过https://github.com/HMCL-dev/HMCL/pull/3547#issuecomment-2928920671 修复了Cleanroom 0.3.0以上版本的启动问题,希望对修复这个有帮助

PIut02 avatar Jun 16 '25 17:06 PIut02

HMCL已经通过HMCL-dev/HMCL#3547 (comment) 修复了Cleanroom 0.3.0以上版本的启动问题,希望对修复这个有帮助

兼容 MultiMC 整合包可不是一个 更改

burningtnt avatar Jun 17 '25 11:06 burningtnt

我倾向于将其归入 #3003 …… 除非这还导致了其他某种客户端启动失败(

LTCatt avatar Jul 19 '25 19:07 LTCatt

如果多个 jar 包中含有相同的类,Java 8 和之前的版本按照 -cp 指定的顺序选择第一个。GTNH 的 Java 8 版本曾通过这一手段来完成对 Forge 的修改。

如果 PCL2 依然认为启动游戏时 Classpath 不应按照 JSON 顺序写入,用户甚至无法启动由 HMCL 转义后的 GTNH。 请三思而后行。

burningtnt avatar Jul 20 '25 01:07 burningtnt

如果不止 Cleanroom 会遇到这个问题那我就 Reopen 了 =。=

LTCatt avatar Jul 20 '25 08:07 LTCatt

近期开发时发现这个问题比较诡异,有的时候是完全按照 JSON 顺序写入,有的时候则不会。

目前还没摸出来规律。

Pigeon0v0 avatar Jul 20 '25 09:07 Pigeon0v0

umm 这是对 inheritsFrom 字段的处理导致的,PCL 用 原版JSON.JsonObject.Merge(当前版本JSON) 来合并 JSON,导致当前版本的 libraries 会被放到原版 libraries 后面。 现在换回来了,当前版本的 libraries 会固定放到原版 libraries 前面,但不确定这会不会导致其他使用 inheritsFrom 字段的版本出现问题……(

LTCatt avatar Jul 21 '25 12:07 LTCatt