Class DownloadArtifactTask

java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.DownloadArtifactTask
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 DownloadArtifactTask extends org.gradle.api.DefaultTask
L3 流水线:把一个远程制品下载到指定位置.

这是 L3 的第一个节点,也是「产物有效性交给 Gradle」的最小完整示范。对照被它取代的旧路径 (MinecraftProvider.provide() 内的下载分支):

旧路径 vs 本任务
旧路径本任务
是否需要下载配置期 Files.exists 判定(配置缓存输入) Gradle up-to-date 检查
并发保护跨进程文件锁 + 锁内二次确认 Gradle 任务图
产物损坏恢复手写内容校验(开 zip 列举条目) 依赖 sha1 输入 + 构建缓存重新恢复
执行时机配置期(afterEvaluate)执行期

为什么输入里没有 Project

旧路径通过 extension.download(url) 构造下载器,该方法做的事只有三件: 建下载器、按命令行是否离线设置 offline、按是否刷新依赖设置 forceDownload。 三者都可以表示为任务输入,因此本任务不需要触碰任何项目模型—— 这正是它能在执行期安全运行、且配置缓存友好的原因。

为什么输出可以位于用户级共享目录

产物刻意落在跨项目共享的位置(如 ~/.gradle/caches/fabric-loom/<mcVersion>/): 同一版本被多个项目使用时,让它们指向同一份文件比各自持有一份更省空间与带宽。 Gradle 的 up-to-date 检查以「输入指纹」为准,多个项目实例对同一路径的判定是一致的, 因此共享输出不会造成互相踩踏——这与旧实现需要跨进程锁的情形不同。
  • 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<Boolean>
    是否强制重新下载(对应 --refresh-dependencies).
    abstract org.gradle.api.provider.Property<Boolean>
    命令行是否要求离线;离线且产物缺失时应当明确失败而不是尝试联网.
    abstract org.gradle.api.file.RegularFileProperty
     
    下载产物所在位置,供诊断输出使用(不参与缓存键).
    abstract org.gradle.api.provider.Property<String>
    期望的 sha1;为空时按 maxAge 缓存策略处理.
    abstract org.gradle.api.provider.Property<String>
    远程制品地址.
    abstract org.gradle.api.provider.Property<Boolean>
    走 maxAge 缓存策略还是严格按 sha1 校验.

    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

    • DownloadArtifactTask

      public DownloadArtifactTask()
  • Method Details

    • getUrl

      @Input public abstract org.gradle.api.provider.Property<String> getUrl()
      远程制品地址.
    • getSha1

      @Input @Optional public abstract org.gradle.api.provider.Property<String> getSha1()
      期望的 sha1;为空时按 maxAge 缓存策略处理.
    • getOffline

      @Input public abstract org.gradle.api.provider.Property<Boolean> getOffline()
      命令行是否要求离线;离线且产物缺失时应当明确失败而不是尝试联网.
    • getForceDownload

      @Input public abstract org.gradle.api.provider.Property<Boolean> getForceDownload()
      是否强制重新下载(对应 --refresh-dependencies).
    • getUseDefaultCache

      @Input public abstract org.gradle.api.provider.Property<Boolean> getUseDefaultCache()
      走 maxAge 缓存策略还是严格按 sha1 校验.
    • getOutputFile

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

      @Internal public Path getOutputPath()
      下载产物所在位置,供诊断输出使用(不参与缓存键).
    • download

      public void download() throws IOException
      Throws:
      IOException