请在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更改了安装程序以处理内置的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
- 这反过来总是触发网络。

目前,我们可以通过删除标签来解决这个问题。但这仍然有点令人困惑,为什么在MacOS上无法复现这个问题。这可能与OS的git安装有关吗?
为了参考,您是如何尝试复现这个问题的?据我所知,MacOS没有unshare,所以我猜您有其他方法来切断网络访问。
我刚刚关闭了我的WiFi进行测试。它没有失败的原因是因为classpath信息已经缓存在.cpcache中。使用-Sforce足够引起它复现。我已在https://clojure.atlassian.net/browse/TDEPS-223提交了工单。
提示:从我们的直接依赖中移除那些标记后,我们现在的状况要好得多。幸运的是,我们的当前间接依赖似乎没有出现此类问题。但是这种情况完全有可能发生,因此,在线离线模式将非常受欢迎 :)
...