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.



Reply via email to