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

欢迎!有关更多信息,请参阅 关于 页面。

+2
Clojure

当构建依赖于 tools.build 的东西时,我期望能一次性构建,这可以获取所有所需的依赖项,然后在没有互联网连接的情况下再次构建。

具体来说,我希望能够分别获取所有这些依赖项,然后在 nix 构建过程中构建。

这适用于 clojure 1.10.3.855,但在 1.10.3.933 中会中断,我不知道为什么。

您可以在以下位置找到可复现的存储库: https://github.com/radvendii/clojure-tools.build-test,其中包含在说明书中。

1 答案

0

使用 Clojure CLI 1.10.3.1087(最新版),我无法重复此问题。如果按照仓库中的说明进行构建,然后切断网络连接,我可以继续成功重构 uberjar。

我注意到 933 修改了安装程序以处理内置 tools.edn 工具的安装问题,可能需要修改 nix 构建来考虑这一点?我不认为自那时起有任何其他安装程序变更。
我们暂时还不确定为什么有时复制失败了,但我们已经尝试了很多次复制案例,并注意到了以下情况
当我们从 deps.edn 中的一个依赖中删除 :tag 项时,我们可以成功离线构建。

我们的代码理解是这样的
- 如果该项存在,t.d.a 调用了 gitlibs/tags. (https://github.com/clojure/tools.deps.alpha/blob/master/src/main/clojure/clojure/tools/deps/alpha/extensions/git.clj#L64)
- 这个实现的逻辑是无条件调用 git fetch。(https://github.com/clojure/tools.gitlibs/blob/master/src/main/clojure/clojure/tools/gitlibs/impl.clj#L179)
- 这反过来始终会连接到网络。

暂时,我们可以通过省略标签来解决这个问题。但是,问题为什么在 Mac OS 上无法复制仍然是个谜。这可能和操作系统的 git 安装有关吗?
为了参考,您是如何尝试复制的?据我所知,MacOS 没有unshare,所以我猜测您可能有其他方式来减少网络访问。
我刚刚关闭了我的wifi来测试。没有失败的原因是因为类路径信息保存在 .cpcache 中。使用 -Sforce 就足以触发它复制。我已经在 https://clojure.atlassian.net/browse/TDEPS-223 上提交了一个工单。
通知:自从我们从直接依赖中移除了这些标签后,我们现在的状况要好得多。幸运的是,在我们的当前依赖项中似乎没有这种问题。但它确实可能会发生,因此确实欢迎在线模式:)
...