Package net.fabricmc.loom.core
Class MinecraftJarRemap
java.lang.Object
net.fabricmc.loom.core.MinecraftJarRemap
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 会有一段「已落位但未加工完」的中间态
被读方看到,而内容校验只能发现截断、发现不了「完整但没加工完」。-
Nested Class Summary
Nested Classes -
Method Summary
Modifier and TypeMethodDescriptionstatic voidrun(MinecraftJarRemap.Options options) 执行一次 jar 重映射.
-
Method Details
-
run
执行一次 jar 重映射.- Parameters:
options- 全部输入,见MinecraftJarRemap.Options- Throws:
IOException- 读写失败
-