Package net.fabricmc.loom.spec
Class SpecStore
java.lang.Object
net.fabricmc.loom.spec.SpecStore
L2 规格层的持久化存储.
配置期只允许读「小数据」,但读不等于可以反复解析:Mojang 的版本清单是全版本清单
(数百 KB ~ MB),而每次配置只需要其中一条;minecraft_info.json 每次配置都要
重新做一次全文 SHA1 校验。这些工作在每次配置、每个子项目上重复,且不随构建结果变化。
本类把「解析结果」与「已验证」这两类状态按输入文件的内容身份落盘,使它们跨 daemon、
跨工作树复用。键由 inputIdentity(Path) 生成,取值来自文件的大小与最后修改时间——
下载器的落位是原子的,文件不会出现「大小与时间不变而内容改变」的情形。
与 ~/.gradle/caches 下既有的手写就绪标记不同,本目录只存放**纯派生数据**:
任何条目都可安全删除,删除后只是重新解析一次,不影响正确性。因此它不需要参与
构建产物的有效性判定,也不会像产物标记那样在配置期形成「观察 → 填充 → 失效」的循环。
-
Constructor Summary
Constructors -
Method Summary
-
Constructor Details
-
SpecStore
-
-
Method Details
-
inputIdentity
生成输入文件的内容身份串.取大小与最后修改时间而非内容哈希:调用方关心的是「这个文件是不是上次那个」, 而计算内容哈希本身就是要省掉的成本。下载产物一律原子落位,故该组合足以区分代次。
- Parameters:
file- 输入文件- Returns:
- 形如
size-mtime的身份串;文件不存在时返回空
-
load
读取已缓存的解析结果.- Parameters:
namespace- 逻辑分区(例如"versions-manifest"),不同用途互不干扰identity- 输入身份串,见inputIdentity(Path)discriminator- 同一输入下区分不同查询的额外维度(例如目标 Minecraft 版本)- Returns:
- 缓存内容;未命中时为空
-
store
写入解析结果.原子落位,且失败不抛异常:缓存写不进去只是下次多解析一次, 不应让它成为构建失败的原因。
- Parameters:
namespace- 逻辑分区identity- 输入身份串discriminator- 额外维度content- 待缓存内容
-