在 jar 中解析 manifest.mf 文件条目的正确方法是什么?

2022-09-03 01:15:27

许多 Java jar 中包含的 manifest.mf 包含的标头看起来很像电子邮件标头。参见示例 [*]

我想要一些可以将这种格式解析为键值对的东西:

Map<String, String> manifest = <mystery-parse-function>(new File("manifest.mf"));

我已经在谷歌上搜索了“parse manifest.mf”“manifest.mf格式”等,我发现了很多关于标头含义的信息(例如,在OSGI捆绑包,标准Java jars等中),但这不是我想要的。

看看一些示例 manifest.mf 文件,我可能会实现一些东西来解析它(对格式进行反向工程),但我不知道我的实现是否真的正确。所以我也不是在寻找别人的快速抛出解析函数,因为它遇到了同样的问题)。

对我的问题的一个很好的答案可以给我指出格式的规范(所以我可以编写自己的正确解析函数)。最好的答案是指向一个现有的开源库,它已经有了正确的实现。

[*] = https://gist.github.com/kdvolder/6625725


答案 1

清单。可以使用清单类读取 MF 文件:

Manifest manifest = new Manifest(new FileInputStream(new File("MANIFEST.MF")));

然后,您可以通过以下操作获取所有条目

Map<String, Attributes> entries = manifest.getEntries();

和所有主要属性通过做

Attributes attr = manifest.getMainAttributes();

一个工作示例

我的文件是这样的:MANIFEST.MF

Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build

我的代码:

Manifest manifest = new Manifest(new FileInputStream(new File("MANIFEST.MF")));
Attributes attr = manifest.getMainAttributes();

System.out.println(attr.getValue("Manifest-Version"));
System.out.println(attr.getValue("X-COMMENT"));

输出:

1.0
Main-Class will be added automatically by build

答案 2

推荐