Package net.fabricmc.loom.pipeline
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() 内的下载分支):
| 旧路径 | 本任务 | |
|---|---|---|
| 是否需要下载 | 配置期 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 -
Method Summary
Modifier and TypeMethodDescriptionvoiddownload()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> getSha1()期望的 sha1;为空时按 maxAge 缓存策略处理.abstract org.gradle.api.provider.Property<String> getUrl()远程制品地址.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, 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
-
DownloadArtifactTask
public DownloadArtifactTask()
-
-
Method Details
-
getUrl
远程制品地址. -
getSha1
期望的 sha1;为空时按 maxAge 缓存策略处理. -
getOffline
命令行是否要求离线;离线且产物缺失时应当明确失败而不是尝试联网. -
getForceDownload
是否强制重新下载(对应--refresh-dependencies). -
getUseDefaultCache
走maxAge缓存策略还是严格按 sha1 校验. -
getOutputFile
@OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputFile() -
getOutputPath
下载产物所在位置,供诊断输出使用(不参与缓存键). -
download
- Throws:
IOException
-