Java 使用jlink的可复制构建

Java 使用jlink的可复制构建,java,jlink,binary-reproducibility,Java,Jlink,Binary Reproducibility,简化的JDK(使用jlink创建)是我们应用程序的一部分。JDK映像所需的模块很少更改。不幸的是,生成一个新的JDK映像(使用完全相同的jlink参数)会导致不同的输出,所以 在差异升级过程中,客户端必须一次又一次地下载相同的文件,这是不必要的 这是一个PoC: $ mkdir jdk-15a jdk-15b $ tar xzf openjdk-15_linux-x64_bin.tar.gz --directory jdk-15a/ $ tar xzf openjdk-15_linux-x64_

简化的JDK(使用
jlink
创建)是我们应用程序的一部分。JDK映像所需的模块很少更改。不幸的是,生成一个新的JDK映像(使用完全相同的
jlink
参数)会导致不同的输出,所以 在差异升级过程中,客户端必须一次又一次地下载相同的文件,这是不必要的

这是一个PoC:

$ mkdir jdk-15a jdk-15b
$ tar xzf openjdk-15_linux-x64_bin.tar.gz --directory jdk-15a/
$ tar xzf openjdk-15_linux-x64_bin.tar.gz --directory jdk-15b/
$ jdk-15a/jdk-15/bin/jlink --compress=1 --module-path jdk-15a/jdk-15/jmods --add-modules java.base,jdk.management,jdk.unsupported,jdk.charsets --output output01
$ jdk-15b/jdk-15/bin/jlink --compress=1 --module-path jdk-15b/jdk-15/jmods --add-modules java.base,jdk.management,jdk.unsupported,jdk.charsets --output output02
$ md5sum output*/lib/modules
9ae5ae63df59593a0892c5ed411d7e59  output01/lib/modules
24b4af31553670799ab286ad1186329e  output02/lib/modules
(我正在使用
jdk-15a
jdk-15b
目录,类似于多个构建服务器上的jdk实例。)

在这种情况下,有没有办法从
jlink
获取信息

使用的JDK版本:

$ cat jdk-15a/jdk-15/release 
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION="15"
JAVA_VERSION_DATE="2020-09-15"
...
OS_ARCH="x86_64"
OS_NAME="Linux"
SOURCE=".:hg:e3f940bd3c8f"

这是一个JDK bug,在.

上报告,有一个声称在JDK-15 build 22中修复的bug。您使用的是哪个版本?@Marcono1234:谢谢您的链接!它是36号楼(2020/8/11)。我是否应该将此报告为回归?是的,我想如果你这样做会很好。他们对JDK-8241602的修复也让我有点困惑,因为它似乎并没有真正解决根本问题(一个集合没有被订购?)。好的,我已经在bugreport.java.com.Great上报告过了,你能在创建公共bug报告后更新这个问题吗。