by
by
抱歉,拿错了网址
0
by

除了Alex使用构建在tools.build之上的用例之外,还存在其他原因使得.jar文件很有用。

精确重现性是考虑此问题的另一个原因。如果有人想在美國构建用于航空电子产品的产品,他们需要符合FAA的DO-178C... 我不是律师,但我理解一个要求是能够生产在设备使用的整个生命周期中(这可能是在获得批准后几年)的软件的二进制精确副本。我自己不做这类工作,但我做一些支持这类人的事情。对clojuretools.build这样的工具进行微小的改动可能会影响生成的/执行的代码的确切性,执行的指令数量,分配的内存量等。在这种情况下,即便是向后兼容的最细微的改动都不能被容忍。其他领域,如机器人或卫星,可能也会有类似的重现性要求,我怀疑美国并不是唯一有这种规定的国家。

Maven坐标是一个更不可变的东西,并且随着时间的推移拥有更好的记录,以确保提供相同的工件。

确切的Git提交是可靠的(可能是大多数项目的最佳选择),但Git历史可以被修订或删除... Git“发布”甚至更易变。它们可以被移动(例如从github到gitlab),标签也可以被移动。如果你在考虑五到十年后的未来,可能会感到有些不安,因为项目维护者可能已经换过几次了。

by
在Clojure中,关于编译代码的再现编译并没有实现,所以tools.build的JAR包与该问题无关。如果要求是“二进制精确副本”,那么Clojure将被排除。
by
这似乎并不是从源代码得到的二进制精确再现,而是针对部署。一旦构建了JAR包,它就永远是相同的(即使它只是包含Clojure源代码)。

话虽如此,我对Clojure的构建从不从源代码再现的原因很好奇?我知道JAR包不能,因为文件上的元数据等,但这可以去除,JAR包的内容仍然可以再现。
by
看起来已经完成了!谢谢所有人! https://search.maven.org/artifact/org.clojure/tools.build/0.8.4/jar

> Clojure已经没有关于编译代码的再现编译

我认为相同的源代码应用于Clojure的特定版本将始终生成相同的结果。(除非有人在编译任务中引入了时间/随机种子?)

> 我很好奇,Clojure构建不从源代码再现的是什么呢?

老实说,我也是。但是话虽如此,如果我们有一个不可变资产可以指向,我们已经减少了可以引入非确定性的东西的集合。
...