RFR: 8276764: Enable deterministic file content ordering for Jar and Jmod

Andrew Leonard aleonard at openjdk.java.net
Thu Nov 18 11:08:41 UTC 2021


On Thu, 18 Nov 2021 10:02:45 GMT, Magnus Ihse Bursie <ihse at openjdk.org> wrote:

>> @mlchung the way I looked at this was the filesMap is a HashMap, so the filesMap.keySet() iteration order is not defined (or necessarily deterministic), the expanded order of the file sets for each version could be ver1, ver2, ver3 or ver3, ver2, ver1... the next time you run it with the same parameters.
>> LinkedHashMap will ensure the iterated order is as inserted (or as specified in the jar args list..)
>> 
>> Although you say "filesMap is sorted by version", I don't see where that is done?
>
> I'm guessing Mandy asks not if the keys are sorted -- this is changed by your patch, but if the value retrieved -- the String[], is sorted. It's a valid question, I think. It's not apparent to me at least that this is the case. If it is not sorted when it is inserted it needs to be sorted when extracted.

@magicus 
ah right, got you.  So the order of each version's String[] is as ordered on the jar cmd line args:
https://github.com/openjdk/jdk/blob/3e87db19bb7e2359e4b1ceaac7c123542345ecb1/src/jdk.jartool/share/classes/sun/tools/jar/Main.java#L664

So for the same jar cmdline input, the output will be deterministic, as in the same order.
If we think we need to be deterministic for different jar cmdline input for the same set of files, I can add a sort, but that wasn't my aim. eg: both these produce the same order?
    jar --create --file my.jar --release 9 v9classesdir1 v9classesdir2
    jar --create --file my.jar --release 9 v9classesdir2 v9classesdir1 
My aim was same input == same output
?

-------------

PR: https://git.openjdk.java.net/jdk/pull/6395


More information about the compiler-dev mailing list