请分享您的想法,参加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构建需要做出相应的改变?我不认为从那时起安装程序有过其他更改。
by
我们还不确定为什么复现有时会失败,但我们已经研究了许多复现案例,并注意到以下情况:
当我们从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上不令人感到意外。这可能和操作系统的git安装有关吗?
by
为了参考,你如何尝试复现这个问题?据我所知,MacOS没有unshare,所以我猜你有其他方法来切断网络访问。
by
我刚刚关闭了我的WiFi进行测试。它没有失败的原因是classpath信息被缓存在了.cpcache中。使用-Sforce足以触发它的复现。我已经在https://clojure.atlassian.net/browse/TDEPS-223创建了工单。
通知:自从我们去除了直接依赖中的这些标签后,我们现在的状况要好得多。幸运的是,在我们的当前间接依赖中似乎没有出现这样的问题。但这种情况确实可能会发生,因此一个离线模式确实非常受欢迎 :)
...