Record Class BundleMetadata
-
Nested Class Summary
Nested Classes -
Constructor Summary
ConstructorsConstructorDescriptionBundleMetadata(List<BundleMetadata.Entry> libraries, List<BundleMetadata.Entry> versions, String mainClass) Creates an instance of aBundleMetadatarecord class. -
Method Summary
Modifier and TypeMethodDescriptionfinal booleanIndicates whether some other object is "equal to" this one.static @Nullable BundleMetadatastatic @Nullable BundleMetadatafromJarCached(SpecStore store, Path jar, @Nullable String artifactSha1) 读取服务端制品的 bundle 元数据,结果按制品的sha1落盘复用.final inthashCode()Returns a hash code value for this object.static booleanReturns 该制品是否已有 bundle 元数据缓存.Returns the value of thelibrariesrecord component.Returns the value of themainClassrecord component.final StringtoString()Returns a string representation of this record class.static voidunpackEntry(Path jar, Path dest, String path, String sha1, boolean refreshDeps) 从 bootstrap jar 中抽取一个内嵌条目到目标位置.versions()Returns the value of theversionsrecord component.
-
Constructor Details
-
BundleMetadata
public BundleMetadata(List<BundleMetadata.Entry> libraries, List<BundleMetadata.Entry> versions, String mainClass) Creates an instance of aBundleMetadatarecord class.- Parameters:
libraries- the value for thelibrariesrecord componentversions- the value for theversionsrecord componentmainClass- the value for themainClassrecord component
-
-
Method Details
-
fromJar
- Throws:
IOException
-
fromJarCached
public static @Nullable BundleMetadata fromJarCached(SpecStore store, Path jar, @Nullable String artifactSha1) throws IOException 读取服务端制品的 bundle 元数据,结果按制品的sha1落盘复用.本方法存在的理由是一个配置期约束:服务端库的注入(
MinecraftLibraryProvider.provideServerLibraries)依赖这里读出的库列表, 而库注入只能在配置期做,因此配置期**必须**拿到 bundle 元数据。但元数据本身是「下载 url + sha1」的纯函数——这两个值来自 version json, 不需要碰磁盘。于是把结果按
sha1缓存后,后续构建可以完全跳过「打开服务端 jar 读内部清单」这一步,配置期也就不再观察该 jar。这是把服务端下载搬到执行期的**先决条件**。首次构建仍须真实读取(此时无缓存),并因此付出一次配置期文件观察; 之后稳定命中。
- Parameters:
store- L2 规格存储jar- 服务端 jarartifactSha1- 该制品在 version json 中声明的 sha1,作为缓存身份- Returns:
- bundle 元数据;非 bundler 的旧版服务端 jar 返回空
- Throws:
IOException
-
isCached
Returns 该制品是否已有 bundle 元数据缓存..命中判定只看缓存条目是否存在:条目里的空内容表示「上次已判定为旧版 jar(无 bundle)」, 那是**结论**而不是缺失,同样算命中。本方法不打开 jar,因此可以安全地在配置期用于判定 「元数据是否已可无 jar 读取地拿到」——这正是
MinecraftProvider决定能否把下载搬到 执行期任务的判据(见fromJarCached(net.fabricmc.loom.spec.SpecStore, java.nio.file.Path, java.lang.String))。- Parameters:
store- L2 规格存储artifactSha1- 该制品在 version json 中声明的 sha1,作为缓存身份;为空时必然未命中- Returns:
- 该制品是否已有 bundle 元数据缓存
-
unpackEntry
public static void unpackEntry(Path jar, Path dest, String path, String sha1, boolean refreshDeps) throws IOException 从 bootstrap jar 中抽取一个内嵌条目到目标位置.抽取规则(原子发布 + 目标文件上的
LoomHash标记)由这里唯一持有:配置期路径 (BundleMetadata.Entry.unpackEntry(Path, Path, Project))与执行期任务 (ExtractMinecraftServerJarTask)都走本方法,避免出现第二套抽取逻辑—— 两套逻辑产出的 jar 只要差一点,「任务产物」与「配置期产物」就会在同一个共享目录里互相判为不可复用。- Parameters:
jar- 内嵌条目所在的 bootstrap jardest- 抽取目标path- 条目在 jar 中的路径sha1- 条目声明的 sha1,作为「已抽取」标记写入目标文件refreshDeps- 为真时忽略既有目标、强制重新抽取- Throws:
IOException
-
toString
Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components. -
hashCode
public final int hashCode()Returns a hash code value for this object. The value is derived from the hash code of each of the record components. -
equals
Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared withObjects::equals(Object,Object). -
libraries
Returns the value of thelibrariesrecord component.- Returns:
- the value of the
librariesrecord component
-
versions
Returns the value of theversionsrecord component.- Returns:
- the value of the
versionsrecord component
-
mainClass
Returns the value of themainClassrecord component.- Returns:
- the value of the
mainClassrecord component
-