2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查看 关于 页面,了解更多关于这个网站是如何运作的信息。

+1
tools.build
重标记

我正在开发一个依赖于 tools.build 的库,并希望将其作为 jar 文件发布。由于 tools.build 仅作为 git 依赖项提供,我无法将其包含在我的 pom 文件中依赖项中。关于这个话题的更广泛讨论可以在这次 Slack 线程 中找到,其中 @alexmiller 请求我将此主题提出。

2 个答案

+2
我不确定这是否是正确的问题?
抱歉,我拿错了链接
0 投票

除了 Alex 用于在 tools.build 之上构建的用例,还有其他原因可以认为 .jar 文件是有用的。

精确重现是考虑这一点的一个原因。如果有人想要在美国航空电子设备中使用的产品,他们将需要符合 FAA 的DO-178C标准 ... 我不是律师,但我的理解是,有一个要求是能够在设备整个生命周期中生成软件的二进制精确副本,这可能是在它们获批准的几年后。我不做这种工作,但是我做的事情支持这样的人。对像 clojuretools.build 这样的工具做出微小的更改可能会影响生成的确切代码,执行的指令数量,分配的内存量等。在这种情况下,甚至最微小的向后兼容性更改都无法容忍。其他领域如机器人或卫星也可能有类似的重现性需求,并且我怀疑并非只有美国有这类法规。

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

确切的git提交是可靠的(可能是大多数项目的最佳选择),但git历史可以被修改或删除... Git的“发布”更是变化无常。它们可以被移动(例如,从github到gitlab),标记也可以被移动。如果你在考虑5年或10年后,项目的维护者可能已经更换一两次,这些想法可能会让你感到恐惧。

就编译代码而言,Clojure本身就没有可重复构建,所以tools.build的JAR与此问题无关。如果需要“二进制精确重复”的版本,Clojure会被排除。
听起来并不是从源代码的二进制精确重复,而是关于部署。一旦JAR构建完成,它总是会相同(即使它只包含Clojure源代码)。

话虽如此,我对Clojure构建为何不能从源代码进行重复构建感到好奇?我知道JAR不是,因为文件上的元数据如时间戳等原因,但这可以被去除,JAR的内容仍然可以重复。
看起来已经完成了!谢谢大家! https://search.maven.org/artifact/org.clojure/tools.build/0.8.4/jar

> 就编译代码而言,Clojure本身就没有可重复构建

我认为在相同的源代码上应用特定版本的Clojure总是会生成相同的输出。(除非有人在编译任务中引入了时间/随机种子?)

> 我很想知道,Clojure构建为何不能从源代码进行重复构建?

说实话,我也一样。但话又说回来,如果我们有一个不可变的资产可以引用,我们已经减少了可能引入非确定性的东西。
...