Class RemappedModArtifacts

java.lang.Object
net.fabricmc.loom.configuration.mods.dependency.RemappedModArtifacts

public final class RemappedModArtifacts extends Object
一批 remapped mod 产物**各自的生产位置**,消费方据此把产物路径换成可注入配置的依赖表示.

为什么消费方不能只依赖「本项目的那一个任务」

产物落在构建内所有项目共用的 remapped_mods 仓库里,同一条路径只能有一个生产者,由 RemapMinecraftTaskRegistry.claimAll(org.gradle.api.Project, java.util.List<java.nio.file.Path>, java.util.Map<java.lang.String, java.lang.String>, java.util.function.Function<java.util.List<java.nio.file.Path>, org.gradle.api.tasks.TaskProvider<? extends org.gradle.api.Task>>) 在同一构建内判定(见 RemapModsTask)。 本项目这一批里可能有若干条产物早已被**别的项目**认领——那些产物由对方的任务产出,本项目不会再写第二遍, 因此消费方必须按**每一条产物**去挂依赖,而不是一律挂到本项目的任务上:后者会让构建因为 「用了别的任务的产物却没声明依赖」而失败,或者更糟——声明了一条并不产出该文件的任务依赖。

依赖按任务路径登记

产出方可能来自另一份 Loom classloader(同一构建内多个项目各带一份 Loom 时会发生),任务实例过不来, 任务路径是字符串、跨 classloader 可用,交给 builtBy 后由 Gradle 解析成真正的(可能是跨项目的) 任务依赖。
  • Constructor Details

    • RemappedModArtifacts

      public RemappedModArtifacts(org.gradle.api.Project project, Path root, Map<Path,RemapMinecraftTaskRegistry.Producer> producers)
      Parameters:
      project - 消费方项目
      root - 共享仓库根(getRemappedModCache)
      producers - 本次登记判定的「产物路径 → 生产位置」;键为绝对规范化路径
  • Method Details

    • dependency

      public Object dependency(String relativeArtifactPath)
      Returns 该产物的依赖表示. 即「文件本身 + 产出它的任务」,可直接交给 DependencyHandler#add 或 ModSettings#getModFiles.
      Parameters:
      relativeArtifactPath - 相对共享仓库根的产物路径(见 LocalMavenHelper.getRelativeArtifactPath(java.lang.String))
      Returns:
      该产物的依赖表示