Name: nt126004 Date: 06/03/2002
FULL PRODUCT VERSION :
java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)
also
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
Windows 2000
A DESCRIPTION OF THE PROBLEM :
If you produce JAR using these two steps:
1. Create JAR from some files without adding manifest
2. Update JAR to include manifest
If you use following code on jar-file produced this way
getManifest() fails.
File jarFile = new File("filename.jar");
inputStream = new FileInputStream(jarFile);
jarInputStream = new JarInputStream(inputStream);
Manifest manifest = jarInputStream.getManifest();
Reason seems to be that manifest is not the first file in
the jar-file. There is allready a bug report (4263225)
about this issue,it was marked "will not be fixed" state.
Bug report states that "Secondly, the manifest file should
always be the first entry in a particular jar file, in fact
our jar tool enforces this restriction. Of course, we
cannot prevent other vendors from manually putting the
manifest at any other place in a jar, which is otherwise
semantically equivalent.". As demonstrated incompabtible
jar-file can be created also by using Sun's jar-tool.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create JAR from some files without adding manifest
2. Update JAR to include manifest
If you use following code on jar-file produced this way
getManifest() fails.
EXPECTED VERSUS ACTUAL BEHAVIOR :
getManifest should not fail.
-------------------- BEGIN SOURCE -----------------------
//compile.bat
javac.exe *.java
// pack.bat
jar cvfM JarTest.jar *.java *.class
jar umf Manifest.mf JarTest.jar
// run.bat
java.exe -classpath JarTest.jar JarTest
// Manifest.mf
// JarTest.java
import java.util.jar.*;
import java.io.*;
public class JarTest {
public static void main(String[] args) {
try {
File jarFile = new File("filename.jar");
InputStream inputStream = new FileInputStream(jarFile);
JarInputStream jarInputStream = new JarInputStream(inputStream);
Manifest manifest = jarInputStream.getManifest();
} catch (Exception e) {
e.printStackTrace();
}
}
}
--------------------- END SOURCE ------------------------
This bug can be reproduced always.
(Review ID: 146951)
======================================================================
- relates to
-
JDK-5046178 JarInputStream doesn't return Manifest object
-
- Closed
-
-
JDK-4338238 JarInputStream returns null Manifest for Indexed JarFile
-
- Closed
-