Caching 让leiningen缓存包

Caching 让leiningen缓存包,caching,clojure,clojurescript,leiningen,Caching,Clojure,Clojurescript,Leiningen,在clojurescript项目中,我希望leiningen在CI构建期间减少对internet连接的依赖。我希望它能将包缓存在网络光盘上(使用:local repo设置创建一个“共享缓存”),然后将其添加为存储库,这样它就可以首先从那里获取,并且只有在“共享缓存”中找不到时才从clojars和其他外部站点获取 我阅读并删除了我的~/.m2文件夹,并将以下内容添加到我的项目.clj: :profiles {:local-cache {:local-repo "/shared

在clojurescript项目中,我希望leiningen在CI构建期间减少对internet连接的依赖。我希望它能将包缓存在网络光盘上(使用
:local repo
设置创建一个“共享缓存”),然后将其添加为存储库,这样它就可以首先从那里获取,并且只有在“共享缓存”中找不到时才从clojars和其他外部站点获取

我阅读并删除了我的
~/.m2
文件夹,并将以下内容添加到我的
项目.clj

:profiles {:local-cache
           {:local-repo "/shared/disc/clojars-cache"
            :repositories {"local" {:uri "file:///shared/disc/clojars-cache"
                                    :releases {:checksum :ignore}}}}}
带有
lein with profile+本地缓存cljsbuild的初始构建确实填充了缓存,但是

  • 我的
    ~/.m2/repository
    文件夹被重新创建并填充了内容,尽管它似乎只是leiningen需要的clojure内容,而且
  • 删除
    ~/.m2
    后,后续重建似乎根本不使用本地存储库,而是从clojars下载
  • 很明显我错过了什么。。。或者也许我用了一种完全错误的方式

    简言之,我怎样才能让莱宁根

  • 在网络光盘上创建包的缓存,以及
  • 让它更喜欢这个缓存作为包的源(而不是像Clojar这样的外部源)

  • 默认情况下,Leiningen已经倾向于转到
    ~/.m2
    。只有当Clojars的
    ~/.m2
    中还没有本地存储请求的JAR副本时,它才会转到Clojars。此规则的例外情况是,如果您指定的是快照版本,则它将每天(默认情况下)到网络上检查一次快照版本是否为最新版本

    如果您根本不想让Leiningen进入网络,您可以将该键设置为
    true

    回答您的问题:

  • 如何让Leiningen在网络磁盘上创建包缓存
  • Leiningen已经在
    ~/.m2
    中创建了一个包缓存。您可以将该目录符号链接到网络磁盘,或者像现在这样使用
    :local repo
    ,尽管听起来好像
    :local repo
    不适合您

  • 如何让Leiningen更喜欢此缓存而不是外部源
  • 莱宁根已经这样做了。听起来像是
    :本地repo
    要么不工作,要么配置不正确,要么该目录不可由Leiningen写入


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

    如果这对您不起作用,您能否提供有关您的设置的更多详细信息,以及为什么希望Leiningen在您的CI构建中减少对网络的依赖


    更新:看到Gitlab CI正在使用后,您似乎需要添加一个


    基本上,您确认
    leiningen
    应该像我期望的那样工作,但它没有。当我删除
    ~/.m2
    :local repo
    指向的文件夹并运行生成时,这两个文件夹都会被创建。在
    :local repo
    中,我找到所有使用的包(Clojure和ClojureScript包),在
    ~/.m2
    中,我只找到Clojure包(即leiningen自己使用的包,如
    figwheel
    ring
    )。我使用的是Gitlab CI,每个构建都有自己的Docker容器,所以在运行之间共享并不容易。我已经用Gitlab缓存的文档更新了这篇文章。这有用吗?确实有用。我读过并使用了
    人工制品
    ,但没有
    缓存
    。Gitlab CI似乎不允许缓存源代码树之外的内容,因此我使用了
    :local repo.local-m2“
    将缓存移动到源代码树中(这实际上起到了作用,这让我想知道我最初使用的
    :local repo
    的绝对路径是否不受支持/有缺陷)。我认为这是编写Gitlab CI YAML文件的更好的资源。
    cache:
      paths:
      - ~/.m2