Behavior change in the jar tool JDK11 vs JDK8.
Pasam Soujanya1
psoujany at in.ibm.com
Mon Mar 14 11:48:42 UTC 2022
There is a significant difference in the way the JAR tool (starting JDK11) seems to be responding to target files that are not present , when compared to JDK8. With JDK 8, the jar tool just reports about target files that are absent, and creates the jar file with whatever targets are available.
With JDK8, If I try to create a jar file with one existing file and another invalid file name I can see achieve getting created with the file that exists. Only the warning seems to be printed for the target that doesn't exists:
$ jar -cvf sample.jar exists.txt does_not_exist.txt
does_not_exist.txt : no such file or directory
added manifest
adding: exists.txt(in = 0) (out= 0)(stored 0%)
>From JDK11 onward upto the latest, though I can see the same verbose output the jar file(sample.jar) is not created.
Looking at the code, the targets that do exist are written to a temporary JAR file, but the following "validation" code, which runs once the tool has finished writing the temporary JAR file, only moves/renames the temporary file to the specified JAR location if "ok" is true. If "ok" is false the temporary file is simply deleted:
https://github.com/openjdk/jdk11u/blob/22186cb1fe22b4b30fc72c67ce9946cd4f03199d/src/jdk.jartool/share/classes/sun/tools/jar/Main.java#L451
Is this behavior change intentional? I couldn't find anything documented in release notes of JDK 9,10,11. If not intentional, can someone help me create bug report on OpenJDK jira? Thank you.
Regards,
Pasam Soujanya.
More information about the core-libs-dev
mailing list