除了在 tools.build 之上构建的 Alex 的用例之外,还有其他原因说明 .jar 文件可能很有用。
完全可重现性是考虑这一点的原因之一。如果有人想在北美使用应用于航空电子设备的产品,他们将需要符合 FAA 的 DO-178C 标准... 我不是律师,但我的理解是其中一个要求是能够生产在设备使用寿命期内部署的软件的二进制精确复制品,这些复制品可能在他们批准后的几年内出现。我并不从事这类工作,但我做的是支持这样的人工作的事情。对如 clojure
或 tools.build
这样的工具的微小修改可能会对生成的/执行的精确代码有影响,对执行多少条指令、分配多少内存等产生影响。在这种情况下,即使是向后兼容的微小更改也不能容忍。其他领域如机器人或卫星可能也有类似的可重现性要求,我怀疑美国并非唯一有这类法规的国家。
Maven 坐标是一个更为永恒的东西,并且随着时间的推移有着更好的记录,可以精确地获得相同的工件。
精确的 Git 提交是可靠的(可能是大多数项目的最佳选项),但 Git 历史可能会被修改或删除... Git "发布"甚至更具可变性和可移植性。它们可以被移动(例如,从 GitHub 移动到 GitLab),标签也可以被移动。如果你在考虑未来五年或十年,这些想法可能更为令人担忧,到那时项目维护者可能已经变动过一两次了。