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)

  1. Launch.blackboard 里已有 gtnhlib.jvmdg.systemClassLoader 标记(core/GTNHExtLibCore.java:66-68)——已做过。
  2. 系统类加载器不是 URLClassLoader(core/GTNHExtLibCore.java:70)——无法用 addURL 追加。
  3. 系统类加载器类名以 com.gtnewhorizons.retrofuturabootstrap 开头(core/GTNHExtLibCore.java:41、 core/GTNHExtLibCore.java:70)——已经是 RFB 自己的加载器,无需再镜像。

正常流程

  1. 反射取 URLClassLoader.addURL(URL) 并 setAccessible(true)(core/GTNHExtLibCore.java:74-75)。
  2. 遍历 LaunchClassLoader.getSources() 的所有 URL,路径含 jvmdowngrader-java-api 的 (core/GTNHExtLibCore.java:79)逐个 addURL.invoke(scl, url) 到系统类加载器并计数(core/GTNHExtLibCore.java:81-83)。
  3. 每个成功镜像的 URL 打一条 Mirrored jvmdg stub {url} onto system-classloader。
  4. 计数为 0:打 jvmdg stub not found on LaunchClassLoader sources; system-classloader mirror skipped 的 warn(core/GTNHExtLibCore.java:85-86),不设标记(下次仍会重试)。
  5. 计数 > 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), 不抛出、不阻断加载。

相关条目