我在没有项目的情况下使用lein run,所以没有 project.clj。
如果您使用 Leiningen,如果您创建一个 project.clj 文件来声明您的依赖项,这会容易得多。 Leiningen 将读取 project.clj 并处理将任何缺少的依赖项获取到本地 Maven 存储库,并在您启动 REPL/应用程序时将它们添加到您的 classpath。 (lein run 在没有 project.clj 的目录中对我不起作用;我收到错误消息:No :main namespace specified in project.clj.。您的意思是 lein repl 吗?)
当我需要一个我认为应该正常工作的 Clojure 依赖项时——比如 clojure.data.json——我注意到它不在我的 .m2 目录中。
clojure.data.json 不随 Clojure 一起提供——它是一个单独的依赖项,必须获取并添加到您的类路径中才能使用它。类路径告诉 JVM 在加载类文件时要查找的位置。如果您在 project.clj 中声明依赖项,Leiningen 将为您完成这两件事:
:dependencies [[org.clojure/clojure "1.10.0"]
[org.clojure/data.json "0.2.6"]]
如果您只想获取依赖项,也可以使用lein deps 命令。
您可以使用lein new project_name_goes_here 创建一个新的/空白的 Leiningen 项目。它将有一个带有一些样板条目的 project.clj 和一个 :dependencies 键,您可以在其中声明依赖项。
我理解错误消息,但不知道它的位置,甚至不知道如何正确地将其添加到 CLASSPATH 以便 REPL 看到它,我仍然卡住了。这是我仍然需要安装的依赖项吗?如果是这样,我如何在不经过项目的情况下安装它?
您可以从 Internet 手动下载它,然后手动将其路径添加到您的类路径中,但是如果您已经在使用 Leiningen,那么在 project.clj 文件中添加一行并让 Leiningen 为您处理要容易得多。
如果不能选择使用带有 Leiningen 的 project.clj 文件,还有其他方法可以使用 Clojure 并在运行时解决依赖关系/构建类路径。 Boot 适应此工作流程,您可以像这样使用 Leiningen 并稍加努力,以及更新的 tools.deps 工具。 this ClojureVerse thread 中都有每个示例,但请注意,其中一些方法与在文件中声明依赖项本质上是相同的,而是将它们声明为 CLI 参数。
例如,使用Clojure CLI 工具:
$ clj -Sdeps "{:deps {org.clojure/data.json {:mvn/version \"0.2.6\"}}}"
Clojure 1.9.0
user=> (require '[clojure.data.json :as json])
nil
user=> (json/write-str {:foo "bar"})
"{\"foo\":\"bar\"}"
user=> (System/getProperty "java.class.path")
"src:
/Users/me/.m2/repository/org/clojure/clojure/1.9.0/clojure-1.9.0.jar:
/Users/me/.m2/repository/org/clojure/data.json/0.2.6/data.json-0.2.6.jar:
/Users/me/.m2/repository/org/clojure/spec.alpha/0.1.143/spec.alpha-0.1.143.jar:
/Users/me/.m2/repository/org/clojure/core.specs.alpha/0.1.24/core.specs.alpha-0.1.24.jar"
您可以在同一目录中创建一个包含 {:deps {org.clojure/data.json {:mvn/version \"0.2.6\"}}} 的 deps.edn 文件,clj 会读取该文件,在必要时解析依赖关系,并相应地构建类路径。