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

欢迎!请在关于页面了解更多此网站如何运作的信息。

+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将安装程序更改为处理内置工具.edn工具的安装,也许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
我刚刚关闭了无线网络进行测试。之所以没有失败,是因为classpath信息被缓存到了.cpcache中。使用-Sforce足够导致它复制。我在https://clojure.atlassian.net/browse/TDEPS-223上提交了一份工单
by
仅供参考:自从我们从直接依赖中移除了那些标签后,我们现在的状况好多了。幸运的是,在我们的当前传输依赖中似乎没有出现这样的问题。但这种情况完全有可能发生,因此真正欢迎离线模式:)
...