找不到 clojure/data/json:如何让我的 REPL 看到这个(和类似的)依赖项
Could not locate clojure/data/json: How do I get my REPL to see this (and similar) dependencies
我正在使用 lein repl
without a project 所以没有 project.clj
.
我是 运行 Leiningen 2.8.1 on Java 1.8.0_191 OpenJDK 64 位服务器虚拟机。
当我需要一个 Clojure 依赖项时,我认为它应该可以正常工作 - 比如 clojure.data.json
- 我注意到它不在我的 .m2 directory 中。这就是我得到 FileNotFoundException Could not locate clojure/data/json__init.class or clojure/data/js
on.clj on classpath
的原因吗?我在那里也找不到我的其他 Clojure 依赖项,所以我不知道它们位于何处,也不知道该依赖项是否应该在 .m2 中。
我理解错误消息,但不知道它的位置,甚至不知道如何将它正确添加到 CLASSPATH 以便 REPL 看到它,我仍然卡住了。
这是我还需要安装的依赖项吗?如果是这样,我如何在不通过项目的情况下安装它?
我不了解 JVM,因为我是新手,所以请在您的回答中添加一些额外的信息。
I am using lein run
without a project so there is no project.clj.
如果您使用的是 Leiningen,那么如果您创建一个 project.clj 文件来声明您的依赖关系,这会容易得多。 Leiningen 将读取 project.clj 并处理将任何缺失的依赖项提取到您的本地 Maven 存储库,并在您启动 REPL/application 时将它们添加到您的 classpath . (lein run
在没有 project.clj 的目录中对我不起作用;我得到一个错误:No :main namespace specified in project.clj.
。你是说 lein repl
吗?)
When I require a Clojure dependency that I assume should just work - like clojure.data.json - I notice that it is not in my .m2 directory.
clojure.data.json 不随 Clojure 一起提供 — 它是一个单独的依赖项,必须获取并添加到您的 class 路径才能使用它。 class 路径告诉 JVM 在加载 class 文件时去哪里查找。如果您在 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
创建一个 new/blank Leiningen 项目。它将有一个带有一些样板条目的 project.clj 和一个可以声明依赖项的 :dependencies
键。
I understand the error message but without knowing its location or even knowing how to properly add it to the CLASSPATH for the REPL to see it, I remain stuck. Is this a dependency that I still need to install? If so, how do I install it without going through a project?
您可以从 Internet 手动下载它,然后手动将其路径添加到您的 class 路径,但如果您已经在使用 Leiningen,则将一行添加到 project.clj 会更容易文件并让 Leiningen 为您处理。
如果使用 project.clj 文件 w/Leiningen 不是一个选项,还有其他方法可以使用 Clojure 并在运行时解析 dependencies/build 一个 class 路径。 Boot accommodates this workflow, you can use Leiningen like this with a little added effort, as well as the newer tools.deps tooling. There are examples of each in 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
会读取该文件,必要时解决依赖关系,然后构建 class相应的路径。
这是使用 lein try
的绝佳机会。一旦你将它添加到你的 ~/.lein/profiles.clj
,你只需 运行: lein try org.clojure/data.json
并且你会看到一个 运行ning REPL 与那个依赖只是一个需求。
我正在使用 lein repl
without a project 所以没有 project.clj
.
我是 运行 Leiningen 2.8.1 on Java 1.8.0_191 OpenJDK 64 位服务器虚拟机。
当我需要一个 Clojure 依赖项时,我认为它应该可以正常工作 - 比如 clojure.data.json
- 我注意到它不在我的 .m2 directory 中。这就是我得到 FileNotFoundException Could not locate clojure/data/json__init.class or clojure/data/js
on.clj on classpath
的原因吗?我在那里也找不到我的其他 Clojure 依赖项,所以我不知道它们位于何处,也不知道该依赖项是否应该在 .m2 中。
我理解错误消息,但不知道它的位置,甚至不知道如何将它正确添加到 CLASSPATH 以便 REPL 看到它,我仍然卡住了。
这是我还需要安装的依赖项吗?如果是这样,我如何在不通过项目的情况下安装它?
我不了解 JVM,因为我是新手,所以请在您的回答中添加一些额外的信息。
I am using
lein run
without a project so there is no project.clj.
如果您使用的是 Leiningen,那么如果您创建一个 project.clj 文件来声明您的依赖关系,这会容易得多。 Leiningen 将读取 project.clj 并处理将任何缺失的依赖项提取到您的本地 Maven 存储库,并在您启动 REPL/application 时将它们添加到您的 classpath . (lein run
在没有 project.clj 的目录中对我不起作用;我得到一个错误:No :main namespace specified in project.clj.
。你是说 lein repl
吗?)
When I require a Clojure dependency that I assume should just work - like clojure.data.json - I notice that it is not in my .m2 directory.
clojure.data.json 不随 Clojure 一起提供 — 它是一个单独的依赖项,必须获取并添加到您的 class 路径才能使用它。 class 路径告诉 JVM 在加载 class 文件时去哪里查找。如果您在 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
创建一个 new/blank Leiningen 项目。它将有一个带有一些样板条目的 project.clj 和一个可以声明依赖项的 :dependencies
键。
I understand the error message but without knowing its location or even knowing how to properly add it to the CLASSPATH for the REPL to see it, I remain stuck. Is this a dependency that I still need to install? If so, how do I install it without going through a project?
您可以从 Internet 手动下载它,然后手动将其路径添加到您的 class 路径,但如果您已经在使用 Leiningen,则将一行添加到 project.clj 会更容易文件并让 Leiningen 为您处理。
如果使用 project.clj 文件 w/Leiningen 不是一个选项,还有其他方法可以使用 Clojure 并在运行时解析 dependencies/build 一个 class 路径。 Boot accommodates this workflow, you can use Leiningen like this with a little added effort, as well as the newer tools.deps tooling. There are examples of each in 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
会读取该文件,必要时解决依赖关系,然后构建 class相应的路径。
这是使用 lein try
的绝佳机会。一旦你将它添加到你的 ~/.lein/profiles.clj
,你只需 运行: lein try org.clojure/data.json
并且你会看到一个 运行ning REPL 与那个依赖只是一个需求。