围绕 lein :dependencies 和 :plugins 的困惑

Confusion surrounding lein :dependencies and :plugins

project.clj 中,当您看到类似以下内容时:

:dependencies [[org.clojure/clojure       "1.8.0"]
               [org.clojure/clojurescript "1.7.228"]
               [com.cemerick/piggieback "0.2.1"]
               [org.clojure/tools.nrepl "0.2.10"]
               [org.clojure/core.async "0.2.374"]]

和:

:plugins [[org.bodil/lein-noderepl "0.1.11"]
          [lein-cljsbuild           "1.1.2"]
          [lein-npm                 "0.6.1"]
          [lein-repls               "1.9.5"]
          [lein-doo                 "0.1.6"]]
  1. 这些包裹来自哪里?仅仅是 Clojars 和 Maven 吗? Lein 也可以配置为从 GitHub 获取它们吗?
  2. 当这些包被添加到您的项目中时, lein 只是下载它们并将它们添加到您的 java class 路径中吗? 或者发生其他事情还有吗?
  1. Where are these packages coming from?

What are the leiningen default repositories?

回答得很好

您可以使用 lein-git-deps 从 GitHub 下载依赖项,但我建议使用 Maven 存储库,因为 Leiningen 生态系统就是围绕它构建的。

  1. Is lein merely downloading them and adding them to your java class path? Or is something else happening as well?

这值得更多讨论。当您启动 leiningen REPL(例如)时,Leiningen 将首先在其本地 ~/.m2 存储库中查找 :dependencies 中的所有依赖项。如果在那里找不到它们,它将向该项目的每个存储库发出请求,以查看它们是否具有该依赖项的副本。如果他们这样做,Leiningen 将下载它,然后递归地下载依赖项依赖项等等。下载所有依赖项后,Leiningen 会将它们全部添加到应用程序的类路径并启动应用程序。

关于 Leiningen 要记住的一件事是有两个 JVM 和两个类路径,一个用于您的应用程序,一个用于 Leiningen。当您将依赖项添加到 :dependencies 时,它们会进入您应用程序的类路径,当它们被添加到 :plugins 时,它们会进入 Leiningen 的类路径。