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

时间:2013-09-19 15:38:41

标签: java parsing jar manifest

许多Java jar中包含的manifest.mf包含与电子邮件标题非常相似的标题。参见示例[*]

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

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

我已经搜索了一下“parse manifest.mf”“manifest.mf format”等等,我发现了很多关于标题含义的信息(例如在OSGI包中,标准Java jar等)但是那不是我想要的。

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

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

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

1 个答案:

答案 0 :(得分:17)

可以使用Manifest类:

读取MANIFEST.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