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