Class MinecraftJarRemap

java.lang.Object
net.fabricmc.loom.core.MinecraftJarRemap

public final class MinecraftJarRemap extends Object
L4 计算核心:把一个 jar 从源命名空间重映射到目标命名空间.

这是从 AbstractMappedMinecraftProvider.remapJar 抽出的计算部分。抽取的判据是 「是否触碰项目模型」:本类**不认识** Project、LoomGradleExtension 或任何 Gradle 类型,全部输入由调用方备妥。

调用方仍需负责两件依赖项目模型的事,它们刻意留在上层:

  • AnnotationsData.getRemappedAnnotations 与 SignatureFixerApplyVisitor.getRemappedSignatures 需要 mappings service, 而 service 的构造依赖 Project。它们的结果作为参数传入。
  • 产物落位后的 maven pom 写出属于仓库维护,不属于重映射计算。

为什么参数这么多是合理的

这些参数原本藏在 LoomGradleExtension 的各个字段里,调用方需要「知道去哪拿」。 显式列出后,它们变成可序列化、可在执行期装配的值——这正是本操作能被任务包裹、 从而脱离配置期执行的前提。参数多不是设计缺陷,而是把隐式依赖显式化的结果。

原子性契约(必须保持)

输出经由 AtomicFiles.publish(java.nio.file.Path, net.fabricmc.loom.util.cache.AtomicFiles.IOConsumer<java.nio.file.Path>) 落位:先写同目录唯一临时文件,全部加工(含 Forge/NeoForge 的 object holder 改写)都在临时文件上完成,最后原子替换。 发布出去的必须是终态——否则共享仓库里的 jar 会有一段「已落位但未加工完」的中间态 被读方看到,而内容校验只能发现截断、发现不了「完整但没加工完」。