如何在jar中验证MANIFEST.MF的顺序?

时间:2011-01-18 18:28:24

标签: java jar packaging

我遇到了一个对我来说绝对新鲜的有趣问题。正如我突然发现的那样,Jar规范说,包括在内,META-INFMANIFEST.MF必须是*.jar包的第一和第二个条目,而不仅仅是归档中的目录和文件。

我正在使用Java框架非常注意这个要求而不是那么冗长。如何检查jar中是否正确订购了META-INFMANIFEST.MF

更新 许多罐子都是第三方,其中有很多。我无法在记事本,excel,hexeditor,photoshop或任何寻找字节序列的东西中打开这些罐子。我需要命令行工具。谢谢!

更新2: 这就是我问这个问题的原因: http://www.mail-archive.com/dev@felix.apache.org/msg17097.html

3 个答案:

答案 0 :(得分:5)

以下命令将按顺序列出JAR的内容:

jar tf foo.jar

请注意,JAR规范中没有实际要求META-INF/MANIFEST.MF首先出现。但是,由jar工具(随JDK提供)执行构建的JAR首先具有清单,因此它已成为惯例。

答案 1 :(得分:2)

带有JDK的jar工具会自动添加它们,所以不应该做任何事情。如果你真的想检查,请获取一个十六进制编辑器,并在任何其他文件名之前查找字符串'META-INF'和'MANIFEST.MF'。

答案 2 :(得分:1)

修复损坏的JAR:

$ mkdir foo
$ cd foo
$ jar xvf ../broken.jar
$ mv META-INF/MANIFEST.MF /tmp/mymanifest
$ jar cvfm fixed.jar /tmp/mymanifest .

参见:MANIFEST.MF must be the first resource in a jar file – here’s how to fix broken jars