Class ExportLoomProjectDataTask

java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.task.ExportLoomProjectDataTask
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 ExportLoomProjectDataTask extends org.gradle.api.DefaultTask
把当前项目的 LoomProjectData 导出为文件,供其它项目在内存共享表里查不到时回退读取.

输出通过 loomProjectDataElements 可消费配置暴露:消费方可以解析该配置(触发本任务), 也可以直接读文件,所以它必须随项目身份与内容一起失效。本类保留 CacheableTask, 同时把 LoomProjectData.fromProject(org.gradle.api.Project) 真正依赖的内容逐项声明为输入, 原因有两点:

  • 不声明输入时,Gradle 只按「输出是否存在」判定 UP-TO-DATE:改了 mod 元数据或映射标识之后文件不刷新, 日常被内存共享表掩盖,只在回退路径与外部消费方那里暴露成过期数据;
  • 构建缓存键里没有项目身份时,多个项目(甚至不同项目路径的工作副本)会算出同一个键, 共享缓存可能把别的项目的 project-data.json 还原到本项目。

所有输入都用 Provider 惰性求值:配置期只登记「怎么取」, 读取映射配置、mod 元数据与 Mixin AP 输出都发生在执行期,不会在配置阶段强制求值。

  • 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
    void
     
    abstract org.gradle.api.provider.Property<String>
    映射标识,与 LoomProjectData.fromProject(org.gradle.api.Project) 写入 DTO 的值同源.
    abstract org.gradle.api.provider.ListProperty<String>
    Mixin AP 映射文件的路径列表.
    abstract org.gradle.api.provider.ListProperty<String>
    项目内全部 mod 的元数据 JSON,与 DTO 中的 mod 列表一一对应.
    abstract org.gradle.api.file.RegularFileProperty
     
    abstract org.gradle.api.provider.Property<String>
    生产命名空间,与 DTO 里写入的值同源;未配置时为空.
    abstract org.gradle.api.provider.Property<String>
    项目路径,作为数据身份参与缓存键,避免共享缓存在不同项目之间复用同一份数据.
    abstract org.gradle.api.provider.Property<Boolean>
    是否拆分环境源集,与 DTO 里写入的值同源.

    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

    • ExportLoomProjectDataTask

      public ExportLoomProjectDataTask()
  • Method Details

    • getProjectPath

      @Input public abstract org.gradle.api.provider.Property<String> getProjectPath()
      项目路径,作为数据身份参与缓存键,避免共享缓存在不同项目之间复用同一份数据.
    • getMappingId

      @Input @Optional public abstract org.gradle.api.provider.Property<String> getMappingId()
      映射标识,与 LoomProjectData.fromProject(org.gradle.api.Project) 写入 DTO 的值同源.

      映射尚未就绪或未启用混淆时该属性为空(用 @Optional 表达,而不是伪造一个占位值)。

    • getProductionNamespace

      @Input @Optional public abstract org.gradle.api.provider.Property<String> getProductionNamespace()
      生产命名空间,与 DTO 里写入的值同源;未配置时为空.
    • getSplitEnvironmentSourceSets

      @Input public abstract org.gradle.api.provider.Property<Boolean> getSplitEnvironmentSourceSets()
      是否拆分环境源集,与 DTO 里写入的值同源.
    • getModJson

      @Input public abstract org.gradle.api.provider.ListProperty<String> getModJson()
      项目内全部 mod 的元数据 JSON,与 DTO 中的 mod 列表一一对应.
    • getMixinMappingFiles

      @Input public abstract org.gradle.api.provider.ListProperty<String> getMixinMappingFiles()
      Mixin AP 映射文件的路径列表.

      只登记路径而不是文件内容:DTO 里保存的也是路径,依赖方直接按路径读取生产者项目的文件, 文件内容不属于导出内容。反过来,把它们声明成 @InputFiles 会让本任务输入命中 compileJava 的输出,从而引入未声明的隐式任务依赖(Gradle 会因此禁用执行优化)。

    • getOutputFile

      @OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputFile()
    • exportProjectData

      public void exportProjectData() throws IOException
      Throws:
      IOException