Package net.fabricmc.loom.pipeline
Class SplitMinecraftJarsTask
java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.SplitMinecraftJarsTask
- 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 SplitMinecraftJarsTask
extends org.gradle.api.DefaultTask
L3 流水线:把 client 与 server jar 拆成 client-only 与 common 两个 jar.
它取代的是 SplitMinecraftProvider.provide() 里那段配置期同步执行的拆分
(无锁快路径 → 跨进程锁 → 锁内二次确认 → 拆分 → 两个产物分别原子落位)。
拆分本身仍走 SplitMinecraftProvider.splitJars(java.nio.file.Path, java.nio.file.Path, java.nio.file.Path, java.nio.file.Path):同一份实现被两条路径共用,
避免两套拆分逻辑产出不等价的 jar(共享条目清单 `version.json` / `assets/.mcassetsroot` /
`assets/minecraft/lang/en_us.json` 也在那里唯一持有)。
| 旧路径 | 本任务 | |
|---|---|---|
| 是否需要拆分 | 配置期 JarReusability.isReusable 逐个产物判定 |
Gradle up-to-date 检查(两个输出与输入指纹) |
| 并发保护 | 跨进程文件锁 + 锁内二次确认 | 任务图 + 构建缓存 |
| 执行时机 | 配置期 afterEvaluate | 执行期 |
两个产物必须一起看
两个输出同属一次拆分的两半,任何一个不可复用都要重跑整次拆分(配置期也是这么判的: 两个产物任一不可复用即进锁重建)。这一点由声明两个@OutputFile 表达:
Gradle 的 up-to-date 判定要求全部输出都与上次执行一致。
输入只用抽取产物
能拆分的前提是「该版本的 server 下载是 bootstrap jar」,其真身在抽取产物里; 因此getServerJar() 直接是抽取任务的输出,而非抽取前的 bootstrap jar。
「不是 bootstrap 版本却要求拆分」在配置期就已经拒绝(判据同样来自不打开 jar 的 L2 元数据)。
为什么 action 自己还要判一次复用
与MergeMinecraftJarsTask 同理:两件产物都在跨项目共享的 <userCache>/<mcVersion>/ 下,
对别的项目而言是 unknown output——既不会 up-to-date,也进不了构建缓存。前置判据由
ArtifactReuse 提供:**两件产物都完好** + 拆分规则未换代 + 两个输入的内容指纹未变,
才整体复用;任一件不符即照常执行整次拆分(与配置期「任一半不可复用即重建」同一口径)。-
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 TypeMethodDescriptionabstract org.gradle.api.file.RegularFileProperty待拆分的 client jar.abstract org.gradle.api.file.RegularFileProperty客户端侧产物.abstract org.gradle.api.file.RegularFileProperty两侧共享产物.abstract org.gradle.api.file.RegularFileProperty待拆分的 server jar(抽取产物).voidsplit()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
-
SplitMinecraftJarsTask
public SplitMinecraftJarsTask()
-
-
Method Details
-
getClientJar
@InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getClientJar()待拆分的 client jar. -
getServerJar
@InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getServerJar()待拆分的 server jar(抽取产物). -
getClientOnlyJar
@OutputFile public abstract org.gradle.api.file.RegularFileProperty getClientOnlyJar()客户端侧产物. -
getCommonJar
@OutputFile public abstract org.gradle.api.file.RegularFileProperty getCommonJar()两侧共享产物. -
split
- Throws:
Exception
-