请参与2024年Clojure调查,分享您的想法!2024 State of Clojure Survey!

欢迎!请查看关于页面,了解更多关于该平台的信息。

+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
- 这个实现的代码无条件地调用git fetch。(https://github.com/clojure/tools.gitlibs/blob/master/src/main/clojure/clojure/tools/gitlibs/impl.clj#L179
- 这反过来又总是触网。

目前,我们可以通过省略标签来解决这个问题。但它在MacOS上失败无法重现仍然有些神秘。这可能和操作系统的git安装有关吗?
仅供参考,您是如何尝试重现这个问题的?据我所知,MacOS没有unshare,所以我推测您采取了某种其他方式来切断网络访问。
我只是关闭了Wi-Fi进行测试。它没有失败的原因是因为classpath信息已缓存在.cpcache中。使用-Sforce足够引起它重现。我已经在https://clojure.atlassian.net/browse/TDEPS-223提交了一张工单。
提醒:自从我们从直接依赖中移除了那些标签后,我们的情况已经好多了。幸运的是,我们当前依存关系似乎没有这样的问题。但这种情况完全可能发生,因此离线模式确实会受到热烈欢迎 :)
...