jvmdg stub 镜像到系统类加载器
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 特殊机制(core mod 类加载期) |
| 实现 | GTNHExtLibCore.mirrorJvmdgStubToSystemClassLoader(core/GTNHExtLibCore.java:65-93) |
| 调用时机 | 静态块第 3 步(core/GTNHExtLibCore.java:62) |
| 幂等标记 | gtnhlib.jvmdg.systemClassLoader(core/GTNHExtLibCore.java:39) |
行为
把 JVM Downgrader(xyz.wagyourtail.jvmdowngrader)的 Java 8 stub 同时挂到系统类加载器上,
使运行在系统类加载器里的代码(部分 hybrid server 插件、日志实现等)也能看到 jvmdg 的类。
跳过条件(直接 return)
Launch.blackboard里已有gtnhlib.jvmdg.systemClassLoader标记(core/GTNHExtLibCore.java:66-68)——已做过。- 系统类加载器不是
URLClassLoader(core/GTNHExtLibCore.java:70)——无法用addURL追加。 - 系统类加载器类名以
com.gtnewhorizons.retrofuturabootstrap开头(core/GTNHExtLibCore.java:41、core/GTNHExtLibCore.java:70)——已经是 RFB 自己的加载器,无需再镜像。
正常流程
- 反射取
URLClassLoader.addURL(URL)并setAccessible(true)(core/GTNHExtLibCore.java:74-75)。 - 遍历
LaunchClassLoader.getSources()的所有 URL,路径含jvmdowngrader-java-api的 (core/GTNHExtLibCore.java:79)逐个addURL.invoke(scl, url)到系统类加载器并计数(core/GTNHExtLibCore.java:81-83)。 - 每个成功镜像的 URL 打一条
Mirrored jvmdg stub {url} onto system-classloader。 - 计数为 0:打
jvmdg stub not found on LaunchClassLoader sources; system-classloader mirror skipped的 warn(core/GTNHExtLibCore.java:85-86),不设标记(下次仍会重试)。 - 计数
> 0:写入gtnhlib.jvmdg.systemClassLoader = true标记(core/GTNHExtLibCore.java:88)。
数值
| 数值 | 值 | 来源 |
|---|---|---|
| 匹配子串 | jvmdowngrader-java-api |
core/GTNHExtLibCore.java:40 |
| RFB 包前缀(跳过条件) | com.gtnewhorizons.retrofuturabootstrap |
core/GTNHExtLibCore.java:41 |
| jvmdowngrader 版本 | 2.0.1(downgraded-8 / downgraded-17 两版均 depload) |
dependencies.gradle |
失败处理
任何 ReflectiveOperationException 被捕获并打 error 日志
Failed to mirror jvmdg stub onto system-classloader(core/GTNHExtLibCore.java:90-92),
不抛出、不阻断加载。
相关条目
- 类加载器例外与 DeLoader 引导 — 本机制的调用者与前置步骤