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

欢迎!请参阅关于页面,了解更多关于此功能的信息。

+1
tools.build
重标记

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

2个答案

+2
我不确定这是否是正确的问题?
by
by
是的,对不起,我拿错了链接
0
by

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

精确的可重复性是考虑这一点的原因。如果有人想在符合美国航空电子设备的产品中构建,他们需要遵守FAA的DO-178C标准……我不是律师,但我的理解是其中一个要求是能够生成软件的二进制精确副本,该软件在设备使用寿命期间部署,可能在它们获得批准后几年。我并不做这种类型的工作,但我为这样的人做一些事情。对像clojuretools.build这样的工具的微小更改可能会对生成的/执行的确切代码、执行的指令数量、分配的内存量等产生影响。在这种情况下,即使是微小的向后兼容性更改也不能容忍。其他领域如机器人或卫星也可能有类似的可重复性要求,我怀疑美国并不是唯一一个有这种监管的国家。

Maven坐标是一个更加不可变的东西,在时间里给你带来了更一致的文件。

精确的git提交是可靠的(可能也是大多数项目的最佳选择),但git历史可以被修改或删除……git "发布"甚至更加不可靠。它们可以被移动(例如从github到gitlab),标签也可以被移动。如果你想在将来5或10年中考虑这些,在项目维护者可能已经换过一两次之后,这些想法会更加令人恐惧。

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 从源构建的不可重复性在哪里?

说实话,我也是。但是话虽如此,如果我们有一个不可变的资产可以指向,我们已经减少了可能导致非确定性的因素集。
...