【问题标题】:clojure and leiningen - using a git repository as dependencyclojure 和 leiningen - 使用 git 存储库作为依赖项
【发布时间】:2023-04-01 05:22:01
【问题描述】:

是否可以让 leiningen 直接从 git 存储库(在 github 上)作为依赖项拉取项目?

将 Bundler 与 Ruby 结合使用,可以将 gem 映射到 git 存储库,从而实现依赖项目的快速开发和集成。

更新

根据接受的答案,现在有一个用于管理 git-deps 的 leiningen 插件: https://github.com/tobyhede/lein-git-deps

【问题讨论】:

    标签: git clojure github dependency-management leiningen


    【解决方案1】:

    Leiningen 不会为你拉动(编辑:无论如何都不是开箱即用的;按照 Sunng 的回答导致人们发现已经为此编写了一个插件 - 另请参阅我的评论关于那个答案;结帐部门仍然是一个很好的内置解决方案),但是您可以将其他项目的结帐放在类路径中。此功能在自述文件的常见问题部分中进行了描述;以下是相关问答:

    问:我想同时破解两个项目,但是很烦人 在它们之间切换。
    答:如果您在 您的项目根目录并将其他一些项目根目录符号链接到其中, Leiningen 将允许您同时破解它们。这意味着 依赖项的更改将在主项目中可见,而无需 必须经历整个 install/switch-projects/deps/restart-repl 循环,并复制在 checkouts 将优先于在 项目.clj。请注意,这不能替代列出 :dependencies中的项目;为了方便起见,它只是对其进行了补充。

    【讨论】:

      【解决方案2】:

      我刚刚在 clojurescriptone 的 project.clj 中找到了这个

      我觉得可能对你有帮助:

      :git-dependencies [["https://github.com/clojure/clojurescript.git"
                             "886d8dc81812962d30a741d6d05ce9d90975160f"]
                         ["https://github.com/levand/domina.git"
                             "8933b2d12c44832c9bfaecf457a1bc5db251a774"]]
      

      文件是here

      【讨论】:

      • 酷,+1!请注意,这不是 Leiningen 内置的——它是由作为 ClojureScript One 源代码树的一部分分发的 Leiningen 插件处理的。这并不是说这个解决方案有什么问题,只是必须从 cljs 中提取该插件才能使用它。也许它会在某个时候单独发布。 (或者它可能已经存在了?我以前从未注意到它,所以我真的不确定......)
      • 酷,谢谢。在将其提取到 lein 插件的过程中,但有几个问题(我第一次尝试插件):github.com/tobyhede/lein-git-deps。会及时通知您,并让您知道它是否有效。
      • 请注意,您仍然必须跟踪 :extra-classpath-dirs 才能使用它。理想情况下,您将拥有一个插件,可以检查所有依赖项的所有 pom 并找到 元素,该元素可以自动为那些在 project.clj 中列为 :dependencies 的内容添加签出依赖项。如果你使用大量的 git 依赖项,这样的插件将非常容易编写。
      【解决方案3】:

      2017 年的答案:使用lein-voom

      您可以使用lein-voom 从 GitHub 或其他 Git 存储库中提取和构建项目依赖项。它的工作原理是让您使用特定于 voom 的元数据来注释您的依赖向量对条目。这是自述文件中的一个示例:

      ^{:voom {:repo "https://github.com/ring-clojure/ring" :branch "1.3"}}
      [ring/ring-core "1.3.0-RC1-20140519_142204-gaf0379b"]
      

      voom 的主要用例是允许在单独的 Git 存储库中维护多个 Clojure 项目的团队轻松依赖另一个项目的一个或多个项目的当前版本,而无需不断部署开发快照版本。

      我更喜欢 lein-voom 而不是 lein-git-deps(2012 年以前接受的答案中推荐的插件),原因如下:

      1. 规范是通过元数据给出的这一事实使这个插件更加灵活和易于扩展。它已经有一个用于指定存储库的特定分支/标签的选项。您可以将其他键/值对添加到映射中,以进行额外的细粒度控制,而无需太多工作。

      2. 您可以简单地从稳定版本的依赖项中删除元数据;即,一旦您的依赖项从 GitHub 转移到 Clojars,就无需移动/重构您的 project.clj 条目。

      3. 在撰写本文时(2017 年 11 月),lein-voom 在过去几个月内已经更新,而 lein-git-deps停滞了4年。

      【讨论】:

        【解决方案4】:

        我刚刚将我的部门从 Leiningen 移出并使用 lein-tools-deps 移到了 deps.edn 文件中。您仍然可以使用 Leiningen 作为构建工具并使用插件。但是您可以使用deps.edn 拉取 git 依赖项(以及所有其他依赖项)。

        您的project.clj 看起来像这样:

        (defproject example-project "0.1.0-SNAPSHOT"
          :source-paths           [] ;; provided by lein-tools-deps
          :resource-paths         [] ;; provided by lein-tools-deps
          :min-lein-version       "2.0.0"
          :main                   example.core
          :aot                    [example]
          :jar-name               "example.jar"
          :plugins                [[lein-tools-deps "0.4.5"]]
          :middleware             [lein-tools-deps.plugin/resolve-dependencies-with-deps-edn]
          :lein-tools-deps/config {:config-files [:install :project]})
        

        然后您的deps.edn 也在项目根目录中,看起来像这样:

        {:paths ["src" "resources"]
         :deps {org.clojure/clojure    {:mvn/version "1.10.1"}
                org.clojure/data.json  {:mvn/version "1.1.0"}
                github/repo            {:git/url "https://github.com/github/repo.git"
                                        :sha "e5f5c9e6839191f1e37ddfa51cf442b2d5403ff3"}}}
        

        【讨论】:

          猜你喜欢
          • 2012-07-07
          • 2020-09-28
          • 2021-01-01
          • 1970-01-01
          • 2012-02-03
          • 2013-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多