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` 也在那里唯一持有)。

旧路径 vs 本任务
旧路径本任务
是否需要拆分配置期 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
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract 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(抽取产物).
    void
     

    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, usesService

    Methods 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, setImpliesSubProjects

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods 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

      public void split() throws Exception
      Throws:
      Exception