Class LoomProjectData
- All Implemented Interfaces:
Serializable
相等性只由 projectPath() 决定。同一次构建里,同一个项目的数据可能来自内存共享表
(LoomGradleSharedData 中的既有实例)、直接读取依赖项目导出的 project-data.json
(fromDependency(org.gradle.api.Project, org.gradle.api.artifacts.ProjectDependency))或两者的组合,内容相同但实例不同。消费方用
distinct() 与 contains 判断「是不是同一个依赖项目」,因此身份必须落在项目路径上;
否则文件回退路径会把同一个项目看成两个不同的项目,使交集为空(依赖项目的 mod 被静默丢弃)
或 distinct() 失效(同一个 mod 被处理两次)。
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionLoomProjectData(String projectPath, List<LoomProjectData.ModData> mods, @Nullable String mappingId, @Nullable String productionNamespace, boolean splitEnvironmentSourceSets, List<String> mixinMappingFiles) -
Method Summary
Modifier and TypeMethodDescriptionboolean相等性只看projectPath():该数据是项目自身状态的投影,一个项目在一次构建里只对应一份数据, 不同来源(内存共享表、导出文件)得到的对象必须被视为同一个项目,见类注释.static Optional<LoomProjectData> fromDependency(org.gradle.api.Project project, org.gradle.api.artifacts.ProjectDependency dependency) 读取依赖项目的跨项目数据,并让三种结果在 API 层面互不混淆.static LoomProjectDatafromProject(org.gradle.api.Project project) static List<LoomProjectData> getDependencies(org.gradle.api.Project project) inthashCode()@Nullable Stringmods()@Nullable Stringstatic Optional<LoomProjectData> 读取跨项目数据文件.static @Nullable StringreadMappingId(org.gradle.api.Project project) 读取当前项目的映射标识,与fromProject(Project)打包进 DTO 的值同源.readMixinMappingFiles(org.gradle.api.Project project) 读取项目内全部 Mixin AP 映射文件路径,与fromProject(Project)打包进 DTO 的列表同源.readModJson(org.gradle.api.Project project) 读取项目内全部 mod 的元数据 JSON,与fromProject(Project)写入 DTO 的 mod 列表同源.static @Nullable StringreadProductionNamespace(org.gradle.api.Project project) 读取生产命名空间,与fromProject(Project)打包进 DTO 的值同源.booleantoString()void
-
Field Details
-
DATA_ELEMENTS_CONFIGURATION
- See Also:
-
-
Constructor Details
-
LoomProjectData
-
-
Method Details
-
projectPath
-
mods
-
mappingId
-
productionNamespace
-
splitEnvironmentSourceSets
public boolean splitEnvironmentSourceSets() -
mixinMappingFiles
-
equals
相等性只看projectPath():该数据是项目自身状态的投影,一个项目在一次构建里只对应一份数据, 不同来源(内存共享表、导出文件)得到的对象必须被视为同一个项目,见类注释. -
hashCode
public int hashCode() -
toString
-
createMods
-
fromProject
-
readProductionNamespace
读取生产命名空间,与fromProject(Project)打包进 DTO 的值同源.供
exportLoomProjectData把它登记为任务输入;未配置时返回null。- Parameters:
project- 目标项目- Returns:
- 生产命名空间名称,或
null表示当前构建里还拿不到
-
readModJson
读取项目内全部 mod 的元数据 JSON,与fromProject(Project)写入 DTO 的 mod 列表同源.供
exportLoomProjectData登记输入指纹:mod 元数据是导出内容的一部分, 它的变化必须让导出文件失效。- Parameters:
project- 目标项目- Returns:
- 每个 mod 一份元数据 JSON
-
readMappingId
读取当前项目的映射标识,与fromProject(Project)打包进 DTO 的值同源.供
exportLoomProjectData把它登记为任务输入;映射尚未就绪或未启用混淆时返回null(此时任务侧的输入属性为空),而不是抛异常。- Parameters:
project- 目标项目- Returns:
- 映射标识,或
null表示当前构建里还拿不到
-
readMixinMappingFiles
读取项目内全部 Mixin AP 映射文件路径,与fromProject(Project)打包进 DTO 的列表同源.供
exportLoomProjectData登记输入指纹。注意 DTO 里保存的是路径, 消费方直接按路径读取生产者项目的文件,因此映射文件本身的内容不属于导出内容的一部分。- Parameters:
project- 目标项目- Returns:
- 映射文件的绝对路径,顺序与源集顺序一致
-
getDependencies
-
fromDependency
public static Optional<LoomProjectData> fromDependency(org.gradle.api.Project project, org.gradle.api.artifacts.ProjectDependency dependency) 读取依赖项目的跨项目数据,并让三种结果在 API 层面互不混淆.- 返回非空:依赖项目是 Loom 项目,且数据可用;
- 返回
Optional.empty():依赖项目没有暴露DATA_ELEMENTS_CONFIGURATION, 即「本来就不是 Loom 项目」,只记 debug 日志,不产生噪音; - 抛出异常:依赖项目确实暴露了数据文件,但文件读取或解析失败。这是「真失败」, 必须上抛——若静默降级成空结果,调用方会把「跨项目数据损坏」当成「该依赖不是 Loom 项目」, 进而静默丢掉依赖项目的 mod 与 mixin 映射,产出不完整的 remap 结果。
- Parameters:
project- 发起查询的项目dependency- 待查询的项目依赖- Returns:
- 依赖项目的跨项目数据;空表示该依赖不是 Loom 项目
-
read
读取跨项目数据文件.空结果与失败被刻意区分开:文件不存在属于「该项目还没有产出数据」的常规情形, 返回
Optional.empty()且不写日志;文件存在却读不动或解析不了时,写一条 默认可见(warn)的日志并抛出异常,避免把损坏的数据伪装成「没有数据」。- Parameters:
path-exportLoomProjectData产出的project-data.json路径- Returns:
- 解析出的项目数据;文件不存在时为空
- Throws:
UncheckedIOException- 文件存在但读取失败com.google.gson.JsonSyntaxException- 文件存在但内容不是可用的项目数据
-
write
- Throws:
IOException
-