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

欢迎!请访问关于页面了解有关此工作机制的更多信息。

+2
Clojure

当我构建一个依赖于 tools.build 的东西时,我预计只能构建一次,这会获取所有必要的依赖,然后再无网络连接的情况下构建。

特别地,我希望能单独获取所有这些依赖,然后在 nix 构建中构建。

这在 clojure 1.10.3.855 中工作,但在 1.10.3.933 中破裂,我不确定为什么。

您可以在https://github.com/radvendii/clojure-tools.build-test找到一个可复制的存储库,readme中有说明。

1 答案

0

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

我注意到933修改了安装器以处理内置工具的安装,可能需要更改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
- 这个实现的impl无条件调用git fetch. (https://github.com/clojure/tools.gitlibs/blob/master/src/main/clojure/clojure/tools/gitlibs/impl.clj#L179
- 这反过来又总是触网。

目前我们可以通过省略标签来解决这个问题。但这个问题在MacOS上无法重现,这仍然有点神秘。这可能是由于操作系统的git安装引起的吗?
仅供参考,您如何尝试重现这个问题?据我所知,MacOS没有unshare,所以我推测您有其他方法来切断网络访问。
我刚刚关闭了WiFi进行测试。这次没有失败的原因是因为类路径信息被保存在了.cpcache中。使用-Sforce足够造成它重现。我已在https://clojure.atlassian.net/browse/TDEPS-223提交了工单
by
提醒:自从我们从直接依赖中移除那些标签后,我们的状况已大大改善。幸运的是,当前我们似乎没有遇到这样的问题。但是,这种情况仍然可能发生,因此离线模式非常受欢迎 :)
...