Class GenerateLegacyForgeJarTask

java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.GenerateLegacyForgeJarTask
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 GenerateLegacyForgeJarTask extends org.gradle.api.DefaultTask
为 legacy Forge(FG2 形态的 userdev,MC 1.7-1.12.2)生产 named 命名的 forge.jar.

它取代的是 MinecraftLegacyPatchedProvider.patchForge 里那段配置期同步执行的逻辑: 复制 Forge universal jar → 重映射到 named → 删 binpatches 与签名 → 补 log4j 辅助类 → 改造 CoreModManager → 写补丁版本标记。

为什么必须搬到执行期

这段逻辑重映射 Forge universal jar 时需要读 Minecraft 的 client/server jar 作为 classpath (见 remapForgeToNamed),而 Minecraft jar 如今由执行期任务产出。留在配置期就迫使 整条 vanilla 链也退回配置期——这正是 MinecraftProvider.projectionBlocker() 里那条 legacy Forge 判据的来历。

产物与配置期逐字节一致的做法

加工顺序与配置期完全相同,全部落在调用方给的临时文件上,最后经 AtomicFiles 原子落位: 中间态从不产生第二个文件名,也不在任何时刻读写同一路径的两份内容。
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.gradle.api.Named

    org.gradle.api.Named.Namer
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    任务名:消费侧(本仓库的测试与诊断)按它引用产出任务.

    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.file.RegularFileProperty
    输入:Forge universal jar(还没重映射到 named 的那一份).
    abstract org.gradle.api.file.RegularFileProperty
    输入:可选的 log4j-core-2.0-beta9.jar.
    abstract org.gradle.api.file.RegularFileProperty
    输入:四列 tiny(official / srg / intermediary / named),重映射方向 official -> named.
    abstract org.gradle.api.file.ConfigurableFileCollection
    输入:Minecraft 的 client / server jar,作为重映射的 classpath(不输出).
    abstract org.gradle.api.file.RegularFileProperty
    产物:named 命名的 forge.jar(与配置期同一条路径).
    abstract org.gradle.api.provider.Property<String>
    要写进产物 manifest 的 Loom 补丁版本(与配置期同一个常量).

    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
  • Field Details

    • NAME

      public static final String NAME
      任务名:消费侧(本仓库的测试与诊断)按它引用产出任务.
      See Also:
  • Constructor Details

    • GenerateLegacyForgeJarTask

      public GenerateLegacyForgeJarTask()
  • Method Details

    • getForgeUniversalJar

      @InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getForgeUniversalJar()
      输入:Forge universal jar(还没重映射到 named 的那一份).
    • getMappings

      @InputFile @PathSensitive(NONE) @Optional public abstract org.gradle.api.file.RegularFileProperty getMappings()
      输入:四列 tiny(official / srg / intermediary / named),重映射方向 official -> named.

      可选:unobfuscated Forge 没有映射配置,此时不设置、也不做重映射 (与配置期 isUnobfuscatedForge() 早返回同判据)。

    • getMinecraftClasspath

      @InputFiles @PathSensitive(NONE) public abstract org.gradle.api.file.ConfigurableFileCollection getMinecraftClasspath()
      输入:Minecraft 的 client / server jar,作为重映射的 classpath(不输出).

      必须是未被 Forge 打过补丁的干净 jar:重映射发生在打补丁之前, 那时 patched jar 尚未存在;而重映射只需要 MC 类的成员签名,干净 jar 已足够。

    • getLog4jBeta9Jar

      @InputFile @PathSensitive(NONE) @Optional public abstract org.gradle.api.file.RegularFileProperty getLog4jBeta9Jar()
      输入:可选的 log4j-core-2.0-beta9.jar.

      旧版 Forge 依赖它的 org/apache/logging/log4j/core/helpers 包,而运行期用的是 更晚版本的 log4j,那些类已移到 utils。为了两边都工作,把 helpers 重打包进 forge.jar。 该 jar 不在依赖里时不设置。

    • getPatchVersion

      @Input public abstract org.gradle.api.provider.Property<String> getPatchVersion()
      要写进产物 manifest 的 Loom 补丁版本(与配置期同一个常量).
    • getOutputJar

      @OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputJar()
      产物:named 命名的 forge.jar(与配置期同一条路径).
    • generate

      public void generate() throws Exception
      Throws:
      Exception