除了Alex使用构建在tools.build之上的用例之外,还存在其他原因使得.jar文件很有用。
精确重现性是考虑此问题的另一个原因。如果有人想在美國构建用于航空电子产品的产品,他们需要符合FAA的DO-178C... 我不是律师,但我理解一个要求是能够生产在设备使用的整个生命周期中(这可能是在获得批准后几年)的软件的二进制精确副本。我自己不做这类工作,但我做一些支持这类人的事情。对clojure
或tools.build
这样的工具进行微小的改动可能会影响生成的/执行的代码的确切性,执行的指令数量,分配的内存量等。在这种情况下,即便是向后兼容的最细微的改动都不能被容忍。其他领域,如机器人或卫星,可能也会有类似的重现性要求,我怀疑美国并不是唯一有这种规定的国家。
Maven坐标是一个更不可变的东西,并且随着时间的推移拥有更好的记录,以确保提供相同的工件。
确切的Git提交是可靠的(可能是大多数项目的最佳选择),但Git历史可以被修订或删除... Git“发布”甚至更易变。它们可以被移动(例如从github到gitlab),标签也可以被移动。如果你在考虑五到十年后的未来,可能会感到有些不安,因为项目维护者可能已经换过几次了。