Package net.fabricmc.loom.pipeline
Class AccessTransformForgeJarTask
java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.AccessTransformForgeJarTask
- 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 AccessTransformForgeJarTask
extends org.gradle.api.DefaultTask
L3 流水线:对打补丁后的中间 Minecraft jar 执行 Forge 的 access transform
(
minecraft-<type>-<ns>-at-patched.jar).
它取代的是 MinecraftPatchedProvider.provide() 里那段配置期同步执行的
accessTransformForge()。
工具声明为什么是「纯值 + 执行期重建」
AT 工具的 classpath 来自项目依赖解析、JVM 可执行文件来自 Java 工具链,二者都只能在配置期取得; 待应用的 AT 文件则要从 userdev jar 里抽出来,落在一个临时目录里。因此这里按本仓库既有的AccessTransformerJarProcessor 处置方式:
- 配置期把工具信息解析成纯值(
AccessTransformerService.resolveTool(org.gradle.api.Project))并逐项声明成@Input/@Classpath; - 执行期用注入的
ObjectFactory重建服务选项 (AccessTransformerService.createOptions(ObjectFactory, AccessTransformerService.Tool, Object)), 并把 AT 文件抽到本任务自己的临时目录里。
AccessTransformerService.execute 构造一处,
与配置期路径不会分叉。-
Nested Class Summary
Nested classes/interfaces inherited from interface org.gradle.api.Named
org.gradle.api.Named.Namer -
Field Summary
FieldsFields 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 TypeMethodDescriptionvoidgenerate()abstract org.gradle.api.file.ConfigurableFileCollectionAT 工具及其依赖的 jar(配置期解析出的绝对路径).abstract org.gradle.api.provider.Property<String> AT 文件在 userdev jar 里的目录形态(ats声明为目录时设置).abstract org.gradle.api.provider.Property<String> AT 工具使用的 JVM 可执行文件;未配置 Java 工具链时为未设置,表示沿用 Gradle 自身的 JVM.abstract org.gradle.api.provider.Property<String> AT 工具的主类.abstract org.gradle.api.provider.ListProperty<String> AT 文件在 userdev jar 里的清单形态(ats声明为文件列表时设置).abstract org.gradle.api.provider.Property<String> 规则当前的命名空间.abstract org.gradle.api.provider.Property<String> 目标 jar 所在的命名空间;与getAtSourceNamespace()同时设置或同时缺省.abstract org.gradle.api.provider.Property<Boolean> 同getAtVerboseStdout():只影响日志透传,不影响产物.abstract org.gradle.api.provider.Property<Boolean> 是否把 AT 工具的标准输出透传到构建日志.abstract org.gradle.api.file.RegularFilePropertyAT 文件的来源:Forge 的 userdev jar.abstract org.gradle.api.file.RegularFileProperty输入:映射文件,用于把 AT 规则翻译到目标 jar 的命名空间.abstract org.gradle.api.file.RegularFilePropertylegacy Forge 专用:要合进产物的forge.jar.abstract org.gradle.api.model.ObjectFactory执行期实例化服务选项用(Project在执行期不可用,见类注释).abstract org.gradle.api.file.RegularFileProperty产物:AT 之后的 jar(与配置期同一条路径).abstract org.gradle.api.file.RegularFileProperty输入:打补丁后的中间 jar(AT 的作用对象).abstract org.gradle.api.provider.Property<String> legacy Forge 专用:写完产物后要打的补丁版本标记.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
-
Field Details
-
NAME
任务名:消费侧(本仓库的测试与诊断)按它引用产出任务.- See Also:
-
-
Constructor Details
-
AccessTransformForgeJarTask
public AccessTransformForgeJarTask()
-
-
Method Details
-
getPatchedIntermediateJar
@InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getPatchedIntermediateJar()输入:打补丁后的中间 jar(AT 的作用对象). -
getForgeUserdevJar
@InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getForgeUserdevJar()AT 文件的来源:Forge 的 userdev jar. -
getAtDirectory
AT 文件在 userdev jar 里的目录形态(ats声明为目录时设置). -
getAtPaths
AT 文件在 userdev jar 里的清单形态(ats声明为文件列表时设置). -
getAtMainClass
AT 工具的主类. -
getAtClasspath
@Classpath public abstract org.gradle.api.file.ConfigurableFileCollection getAtClasspath()AT 工具及其依赖的 jar(配置期解析出的绝对路径). -
getAtJavaExecutable
AT 工具使用的 JVM 可执行文件;未配置 Java 工具链时为未设置,表示沿用 Gradle 自身的 JVM. -
getAtVerboseStdout
是否把 AT 工具的标准输出透传到构建日志.标记为
@Internal而**不是**@Input:它只决定输出流接哪里, 不参与产物字节。当它是@Input时,本任务虽标了@CacheableTask却会因「日志级别变化」而缓存键变化,永远撞不到同一键(实测:AllinGame 的 forge 生产线每轮重跑 10 步 MCP 链,并连带下游三个任务一起重跑)。 -
getAtVerboseStderr
同getAtVerboseStdout():只影响日志透传,不影响产物. -
getOutputJar
@OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputJar()产物:AT 之后的 jar(与配置期同一条路径). -
getMappings
@InputFile @PathSensitive(NONE) @Optional public abstract org.gradle.api.file.RegularFileProperty getMappings()输入:映射文件,用于把 AT 规则翻译到目标 jar 的命名空间.声明成文件而非映射树:映射树不可序列化,配置缓存在此只记录文件路径与内容哈希, 树本身在执行期按需重建(见
readMappings())。可选:只有 legacy Forge 需要翻译(见
getAtSourceNamespace()), 而 disableObfuscation 形态下项目根本没有映射配置,此时既不翻译也不设置本输入。 -
getAtSourceNamespace
规则当前的命名空间.仅在「规则命名空间与作用对象不一致」时需要——目前只有 legacy Forge(
srg规则 作用于 official jar)。未设置表示不翻译,规则原样交给 AT 工具。 -
getAtTargetNamespace
目标 jar 所在的命名空间;与getAtSourceNamespace()同时设置或同时缺省. -
getMergeForgeJar
@InputFile @PathSensitive(NONE) @Optional public abstract org.gradle.api.file.RegularFileProperty getMergeForgeJar()legacy Forge 专用:要合进产物的forge.jar.legacy 链的最终 jar 是「AT 后的 Minecraft jar + Forge 自身的类」,而 modern 链把这两者 交给下游的 remap 任务。不设置表示不需要合并(modern / NeoForge 形态)。
-
getPatchVersion
legacy Forge 专用:写完产物后要打的补丁版本标记.legacy 链的最终 jar 不再经任何下游 remap 任务,所以就绪标记必须由本任务自己写。 不设置表示不写(modern 形态由
GenerateForgePatchedJarTask负责)。 -
getObjects
@Inject public abstract org.gradle.api.model.ObjectFactory getObjects()执行期实例化服务选项用(Project在执行期不可用,见类注释). -
generate
- Throws:
Exception
-