Package net.fabricmc.loom.pipeline
Class ExtractMinecraftServerJarTask
java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.ExtractMinecraftServerJarTask
- All Implemented Interfaces:
Comparable<org.gradle.api.Task>,org.gradle.api.internal.DynamicObjectAware,org.gradle.api.internal.TaskInternal,org.gradle.api.Named,org.gradle.api.plugins.ExtensionAware,org.gradle.api.Task,org.gradle.util.Configurable<org.gradle.api.Task>
@CacheableTask
public abstract class ExtractMinecraftServerJarTask
extends org.gradle.api.DefaultTask
L3 流水线:把 bootstrap server jar 里内嵌的 server jar 抽出来.
它取代的是 MinecraftProvider.extractBundledServerJar() 那段配置期同步执行的抽取
(由 provide() 在锁内调用)。1.18(21w39a)之后的 server 下载是 bootstrap jar,
真正的 server jar 在 META-INF/versions/<版本>/ 下,抽取产物才是后续合并/拆分/重映射的输入。
| 旧路径 | 本任务 | |
|---|---|---|
| 是否需要抽取 | 配置期读 LoomHash 标记 + Files.exists |
Gradle up-to-date 检查(输出内容与输入指纹) |
| 并发保护 | 跨进程文件锁 + 锁内二次确认 | 任务图 + 构建缓存 |
| 执行时机 | 配置期 afterEvaluate | 执行期 |
抽取规则不在这里
真正的抽取(原子发布 +LoomHash 标记)由 BundleMetadata.unpackEntry(java.nio.file.Path, java.nio.file.Path, java.lang.String, java.lang.String, boolean) 唯一持有:
配置期路径与执行期路径共用同一份实现。若本任务另写一套,两套产出的 jar 只要差一点,
「任务产物」与「配置期产物」就会在同一个共享目录里互相判为不可复用(LoomHash 标记不匹配
会触发配置期路径重新抽取),而两者本应是同一个文件。
为什么输入里没有 Project
配置期那一版要从 Project 取extension.refreshDeps(),而「是否要求刷新」本身就是配置期事实,
与「命令行是否要求刷新」同源,因此改为显式的 getRefreshDeps() 输入:任务在执行期不触碰项目模型,
配置缓存友好。
产物只有一个文件,刻意不声明目录
输出位于跨项目共享的<userCache>/<mcVersion>/:同一目录里还有 client/server/merged jar 等
别的 provider、别的阶段(甚至别的 loom 版本)的产物,声明目录会把它们纳入本任务的快照与清理范围。-
Nested Class Summary
Nested classes/interfaces inherited from interface org.gradle.api.Named
org.gradle.api.Named.Namer -
Field Summary
Fields inherited from interface org.gradle.api.Task
TASK_ACTION, TASK_CONSTRUCTOR_ARGS, TASK_DEPENDS_ON, TASK_DESCRIPTION, TASK_GROUP, TASK_NAME, TASK_OVERWRITE, TASK_TYPE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidextract()abstract org.gradle.api.provider.Property<String> 内嵌 server jar 在 bootstrap jar 中的路径(来自 bundle 元数据的META-INF/versions.list).abstract org.gradle.api.provider.Property<String> 内嵌 server jar 声明的 sha1.abstract org.gradle.api.file.RegularFileProperty抽取出的 server jar.abstract org.gradle.api.provider.Property<Boolean> 是否忽略既有产物、强制重新抽取(对应配置期的extension.refreshDeps()).abstract org.gradle.api.file.RegularFilePropertybootstrap server jar(1.18 起 server 下载的形态).Methods inherited from class org.gradle.api.DefaultTask
compareTo, configure, dependsOn, doFirst, doFirst, doFirst, doLast, doLast, doLast, finalizedBy, getActions, getAnt, getDependsOn, getDescription, getDestroyables, getDidWork, getEnabled, getExtensions, getFinalizedBy, getGroup, getInputs, getLocalState, getLogger, getLogging, getMustRunAfter, getName, getOutputs, getPath, getProject, getShouldRunAfter, getState, getTaskDependencies, getTemporaryDir, getTimeout, hasProperty, mustRunAfter, onlyIf, onlyIf, onlyIf, property, setActions, setDependsOn, setDescription, setDidWork, setEnabled, setFinalizedBy, setGroup, setMustRunAfter, setOnlyIf, setOnlyIf, setOnlyIf, setProperty, setShouldRunAfter, shouldRunAfter, usesServiceMethods inherited from class org.gradle.api.internal.AbstractTask
acceptServiceReferences, appendParallelSafeAction, doNotTrackState, doNotTrackStateIf, getAsDynamicObject, getIdentityPath, getImpliesSubProjects, getLifecycleDependencies, getOnlyIf, getReasonNotToTrackState, getReasonsNotToTrackState, getReasonTaskIsIncompatibleWithConfigurationCache, getRequiredServices, getServices, getSharedResources, getStandardOutputCapture, getTaskActions, getTaskIdentity, getTemporaryDirFactory, hasTaskActions, injectIntoNewInstance, isCompatibleWithConfigurationCache, isEnabled, isHasCustomActions, notCompatibleWithConfigurationCache, prependParallelSafeAction, restoreOnlyIf, restoreTaskActions, setImpliesSubProjectsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.gradle.api.Task
doNotTrackState, notCompatibleWithConfigurationCache
-
Constructor Details
-
ExtractMinecraftServerJarTask
public ExtractMinecraftServerJarTask()
-
-
Method Details
-
getServerJar
@InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getServerJar()bootstrap server jar(1.18 起 server 下载的形态). -
getEntryPath
内嵌 server jar 在 bootstrap jar 中的路径(来自 bundle 元数据的META-INF/versions.list). -
getEntrySha1
内嵌 server jar 声明的 sha1.它是「这个产物是不是那一份」的身份:既是 up-to-date 判定的输入,也是写入产物
LoomHash标记的值——配置期路径据此判定抽取产物可复用。 -
getRefreshDeps
是否忽略既有产物、强制重新抽取(对应配置期的extension.refreshDeps()). -
getOutputJar
@OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputJar()抽取出的 server jar. -
extract
- Throws:
IOException
-