在 clojurescript 项目中,我希望 leiningen 在我们的CI构建过程中更少依赖互联网连接。我希望得到它来缓存网络光盘上的包(使用:local-repo
设置来创建“共享缓存”),然后将其添加为存储库,使其从那里首先从<当em> clojars 和其他外部网站无法在“共享缓存”中找到它时。
我看了this,删除了我的~/.m2
文件夹,并将以下内容添加到我的project.clj
:
:profiles {:local-cache
{:local-repo "/shared/disc/clojars-cache"
:repositories {"local" {:uri "file:///shared/disc/clojars-cache"
:releases {:checksum :ignore}}}}}
使用lein with-profile +local-cache cljsbuild
的初始构建确实填充了缓存,但是
~/.m2/repository
文件夹被重新创建并填充了内容,但它似乎只是 leiningen 所需的 clojure 内容,并且~/.m2
后续重建后,似乎根本不使用本地存储库,而是从 clojars 下载。显然我错过了一些东西......或者我可能会以完全错误的方式解决这个问题。
简而言之,我怎样才能将 leiningen 带到
答案 0 :(得分:3)
Leiningen已经更喜欢默认转到~/.m2
。如果它还没有在~/.m2
本地存储请求的JAR副本,它将只会转到Clojars。此规则的例外情况是,如果您指定SNAPSHOT版本,它将转到网络以检查它所拥有的SNAPSHOT版本是否是最新版本(默认情况下)。
如果您不希望Leiningen完全访问网络,则可以将:offline?
密钥设置为true
。
回答你的问题:
- 如何让Leiningen在网络磁盘上创建软件包缓存?
醇>
Leiningen已经在~/.m2
中创建了一个包缓存。您可以将该目录符号链接到您的网络磁盘,或者像现在一样使用:local-repo
,虽然听起来:local-repo
对您不起作用?
- 如何让Leiningen更喜欢这个缓存而非外部资源呢?
醇>
Leiningen已经这样做了。听起来:local-repo
无法正常工作,配置不正确,或者Leiningen无法写入该目录?
回过头来查看更广泛的问题,您希望在CI版本中防止不必要的网络流量。 Leiningen已默认缓存每个依赖项。您还没有说过您正在使用哪种CI工具,但它们都应该能够在运行之间缓存~/.m2
文件夹。根据工具的不同,您必须每个项目下载一次deps,或者每台机器下载一次。我建议坚持下去,而不是试图通过网络共享deps,因为这可能导致难以调试测试失败。
如果这不适合您,您能否提供有关您的设置的更多详细信息,以及为什么您希望Leiningen在CI版本中减少对网络的依赖?
更新:看到使用Gitlab CI后,您似乎需要添加caching config?
cache:
paths:
- ~/.m2