Compiling module descriptors is not reproducible?

Alan Bateman Alan.Bateman at oracle.com
Sat May 19 11:26:55 UTC 2018


On 19/05/2018 10:18, Mark Raynsford wrote:
> Hello!
>
> I've been interested for a while in making all of my software builds
> reproducible [0]. I don't think there's ever been any kind of
> written guarantee that the output of javac will be completely
> deterministic, but to date it seems like it actually has been. However,
> I was a bit disappointed today to find that the output of one of the
> builds at AdoptOpenJDK [1] seems to be inserting compiler version
> information into compiled module descriptors. It doesn't seem to be
> doing this for any other class files.
The requires table in the Module attribute can be used by compilers to 
record version information about dependences. javac does record the 
version information, I don't know if there is a way to disable that. In 
any case, I assume your question will be partly answered by looking at 
the output of `java --list-modules` on the different builds. If you 
download OpenJDK builds from jdk.java.net/10 then you should see that 
the standard and JDK-specific modules all report their version string as 
"10" or "10.0.1" as they have been built with configure options that 
make it so. At a guess, your mail may have included the output from an 
exploded (as opposed to images) build.

-Alan


More information about the jigsaw-dev mailing list