gpt4 book ai didi

java - 是否可以强制 Java 8 编译器创建可重现的类文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:22 25 4
gpt4 key购买 nike

我的雇主有一项业务需要让 Java 构建逐字节可重现。我知道使 JAR 文件可重现的困难(由于归档顺序和时间戳),但此时我在谈论类文件。

我在 Mac 和 Linux 上都使用 Java 8u65 构建了相同的代码。类文件是二进制不同的。两个类都反编译回同一个源;要查看差异,需要 javap 反汇编程序。

源码好像是:

final TrustStrategy acceptingTrustStrategy =
(X509Certificate[] chain, String authType) -> true;

在一次构建中,结果是:

private static boolean lambda$restTemplate$38(java.security.cert.X509Certificate[], java.lang.String) throws java.security.cert.CertificateException;
Code:
0: iconst_1
1: ireturn


另一方面,它是:

private static boolean lambda$restTemplate$15(java.security.cert.X509Certificate[], java.lang.String) throws java.security.cert.CertificateException;
Code:
0: iconst_1
1: ireturn

匿名 lambda 的名称中包含不同的数字(lambda$restTemplate$15lambda$restTemplate$38)。

看起来,当我在同一台主机上重建时,我得到了相同的字节。当主机不同时,数字会改变;两台 Linux 主机产生了不同的字节。

是什么决定了这些数字?有没有办法强制每次编译都在这个地方使用相同的数字,从而产生相同的类文件?还是 Java 8 类文件编译不确定?

最佳答案

我没有仔细研究,但是 this article讨论 Java 中的可重现构建,以及 reproducible-builds有一些工具可以帮助构建(和类)可重现。

您可能正在寻找的链接是 Reproducible Build Maven Plugin ,专门为 Java 制作,试图“从生成的工件中去除不可复制的数据”。

关于java - 是否可以强制 Java 8 编译器创建可重现的类文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55150805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com