MANIFEST.MF must be the first resource in a jar file - here's how to fix broken jars
Some tools, like the Sling OSGi Installer, require the MANIFEST.MF
to be the first file in a jar file, or they won't find it.
This happens when using the java.util.jar.JarInputStream
class to read a jar's manifest, for example.
The manifest is where OSGi bundle headers are found, for example, so not having it in the right place makes the jar unusuable as a bundle.
I won't discuss here whether this requirement is part of the jar file spec (it would make sense, as this makes sure you can read it quickly even from a huge jar file), but anyway there are many cases where this is required.
To fix a jar where this is not the case, you need to unpack the jar and recreate it, as in this example, starting from a broken.jar
in the current directory:
$ mkdir foo $ cd foo $ jar xvf ../broken.jar $ mv META-INF/MANIFEST.MF /tmp/mymanifest $ jar cvfm fixed.jar /tmp/mymanifest .
That's it - creating the new jar with the jar
utility puts the MANIFEST.MF
in the right place.