让leiningen缓存包

时间:2016-06-21 13:21:36

标签: caching clojure clojurescript leiningen

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的初始构建确实填充了缓存,但是

  1. 我的~/.m2/repository文件夹被重新创建并填充了内容,但它似乎只是 leiningen 所需的 clojure 内容,并且
  2. 删除~/.m2后续重建后,似乎根本不使用本地存储库,而是从 clojars 下载。
  3. 显然我错过了一些东西......或者我可能会以完全错误的方式解决这个问题。

    简而言之,我怎样才能将 leiningen 带到

    1. 在网络光盘上创建包缓存,
    2. 让它更喜欢这个缓存作为包的来源(通过外部来源,如 clojars )?

1 个答案:

答案 0 :(得分:3)

Leiningen已经更喜欢默认转到~/.m2。如果它还没有在~/.m2本地存储请求的JAR副本,它将只会转到Clojars。此规则的例外情况是,如果您指定SNAPSHOT版本,它将转到网络以检查它所拥有的SNAPSHOT版本是否是最新版本(默认情况下)。

如果您不希望Leiningen完全访问网络,则可以将:offline?密钥设置为true

回答你的问题:

  
      
  1. 如何让Leiningen在网络磁盘上创建软件包缓存?
  2.   

Leiningen已经在~/.m2中创建了一个包缓存。您可以将该目录符号链接到您的网络磁盘,或者像现在一样使用:local-repo,虽然听起来:local-repo对您不起作用?

  
      
  1. 如何让Leiningen更喜欢这个缓存而非外部资源呢?
  2.   

Leiningen已经这样做了。听起来:local-repo无法正常工作,配置不正确,或者Leiningen无法写入该目录?

回过头来查看更广泛的问题,您希望在CI版本中防止不必要的网络流量。 Leiningen已默认缓存每个依赖项。您还没有说过您正在使用哪种CI工具,但它们都应该能够在运行之间缓存~/.m2文件夹。根据工具的不同,您必须每个项目下载一次deps,或者每台机器下载一次。我建议坚持下去,而不是试图通过网络共享deps,因为这可能导致难以调试测试失败。

如果这不适合您,您能否提供有关您的设置的更多详细信息,以及为什么您希望Leiningen在CI版本中减少对网络的依赖?

更新:看到使用Gitlab CI后,您似乎需要添加caching config

cache:
  paths:
  - ~/.m2