在 Clojure 中将依赖项 "clojure.tools.trace" 导入 REPL 失败:找不到文件
Import dependency "clojure.tools.trace" to REPL in Clojure failed: File not found
我是 Clojure 的新手,正在尝试使用函数 trace
.
调试我的程序
我在 REPL 中试过这个:
(require '[clojure.tools.trace :as trace])
但是抛出异常:
Execution error (FileNotFoundException) at user/eval199 (REPL:1).
Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath.
*e 是这样说的:
#error {
:cause "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:via
[{:type java.io.FileNotFoundException
:message "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:at [clojure.lang.RT load "RT.java" 462]}]
:trace
[[clojure.lang.RT load "RT.java" 462]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[user$eval193 invokeStatic "NO_SOURCE_FILE" 1]
[user$eval193 invoke "NO_SOURCE_FILE" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7132]
[clojure.core$eval invokeStatic "core.clj" 3214]
[clojure.core$eval invoke "core.clj" 3210]
[clojure.main$repl$read_eval_print__9086$fn__9089 invoke "main.clj" 437]
[clojure.main$repl$read_eval_print__9086 invoke "main.clj" 437]
[clojure.main$repl$fn__9095 invoke "main.clj" 458]
[clojure.main$repl invokeStatic "main.clj" 458]
[clojure.main$repl_opt invokeStatic "main.clj" 522]
[clojure.main$main invokeStatic "main.clj" 667]
[clojure.main$main doInvoke "main.clj" 616]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.RestFn applyTo "RestFn.java" 132]
[clojure.lang.Var applyTo "Var.java" 705]
[clojure.main main "main.java" 40]]}
我在 Github 上搜索了 clojure.tools.trace 的文档。
它说你需要导入依赖,但依赖信息是针对Clojure CLI、Leiningen或Maven的,而不是针对clojure中的REPL。
(当我在 clojure 中说 REPL 时,我实际上是指 clj
,抱歉描述模糊)
所以我就卡在这里了。谁能告诉我如何解决这个问题以及发生了什么?
如果您使用的是 Leiningen,请确保您的 project.clj
中有这样一行:
[org.clojure/tools.trace "0.7.10"]
在 :dependencies
键下。然后它将起作用:
> lein repl
Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
nREPL server started on port 38715 on host 127.0.0.1 - nrepl://127.0.0.1:38715
REPL-y 0.4.3, nREPL 0.6.0
Clojure 1.10.2-alpha1
demo.core=> (require '[clojure.tools.trace :as trace])
nil
有关其他依赖格式的信息,请参阅 the clojure.tools.trace GitHub page。
我总是通过从 git 克隆 this Clojure template project 来开始一个新的 Clojure 项目,然后将我的更改添加到 project.clj
,等等。然后您可以键入 lein repl
到启动一个 repl 会话。
由于您使用的是 clj
(Clojure CLI),因此您需要将 clojure.tools.trace
库添加到 deps.edn
文件中:
seanc@DESKTOP-30ICA76:~/clojure$ mkdir lyhokia
seanc@DESKTOP-30ICA76:~/clojure$ cd lyhokia/
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ vi deps.edn
<add the library>
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ cat deps.edn
{:deps {org.clojure/tools.trace {:mvn/version "0.7.10"}}}
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ clj
Clojure 1.10.1
user=> (require '[clojure.tools.trace :as trace])
nil
user=> (trace/trace (* 1 2 3))
TRACE: 6
6
user=>
我是 Clojure 的新手,正在尝试使用函数 trace
.
我在 REPL 中试过这个:
(require '[clojure.tools.trace :as trace])
但是抛出异常:
Execution error (FileNotFoundException) at user/eval199 (REPL:1).
Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath.
*e 是这样说的:
#error {
:cause "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:via
[{:type java.io.FileNotFoundException
:message "Could not locate clojure/tools/trace__init.class, clojure/tools/trace.clj or clojure/tools/trace.cljc on classpath."
:at [clojure.lang.RT load "RT.java" 462]}]
:trace
[[clojure.lang.RT load "RT.java" 462]
[clojure.lang.RT load "RT.java" 424]
[clojure.core$load$fn__6839 invoke "core.clj" 6126]
[clojure.core$load invokeStatic "core.clj" 6125]
[clojure.core$load doInvoke "core.clj" 6109]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[clojure.core$load_one invokeStatic "core.clj" 5908]
[clojure.core$load_one invoke "core.clj" 5903]
[clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
[clojure.core$load_lib invokeStatic "core.clj" 5947]
[clojure.core$load_lib doInvoke "core.clj" 5928]
[clojure.lang.RestFn applyTo "RestFn.java" 142]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$load_libs invokeStatic "core.clj" 5985]
[clojure.core$load_libs doInvoke "core.clj" 5969]
[clojure.lang.RestFn applyTo "RestFn.java" 137]
[clojure.core$apply invokeStatic "core.clj" 667]
[clojure.core$require invokeStatic "core.clj" 6007]
[clojure.core$require doInvoke "core.clj" 6007]
[clojure.lang.RestFn invoke "RestFn.java" 408]
[user$eval193 invokeStatic "NO_SOURCE_FILE" 1]
[user$eval193 invoke "NO_SOURCE_FILE" 1]
[clojure.lang.Compiler eval "Compiler.java" 7177]
[clojure.lang.Compiler eval "Compiler.java" 7132]
[clojure.core$eval invokeStatic "core.clj" 3214]
[clojure.core$eval invoke "core.clj" 3210]
[clojure.main$repl$read_eval_print__9086$fn__9089 invoke "main.clj" 437]
[clojure.main$repl$read_eval_print__9086 invoke "main.clj" 437]
[clojure.main$repl$fn__9095 invoke "main.clj" 458]
[clojure.main$repl invokeStatic "main.clj" 458]
[clojure.main$repl_opt invokeStatic "main.clj" 522]
[clojure.main$main invokeStatic "main.clj" 667]
[clojure.main$main doInvoke "main.clj" 616]
[clojure.lang.RestFn invoke "RestFn.java" 397]
[clojure.lang.AFn applyToHelper "AFn.java" 152]
[clojure.lang.RestFn applyTo "RestFn.java" 132]
[clojure.lang.Var applyTo "Var.java" 705]
[clojure.main main "main.java" 40]]}
我在 Github 上搜索了 clojure.tools.trace 的文档。
它说你需要导入依赖,但依赖信息是针对Clojure CLI、Leiningen或Maven的,而不是针对clojure中的REPL。
(当我在 clojure 中说 REPL 时,我实际上是指 clj
,抱歉描述模糊)
所以我就卡在这里了。谁能告诉我如何解决这个问题以及发生了什么?
如果您使用的是 Leiningen,请确保您的 project.clj
中有这样一行:
[org.clojure/tools.trace "0.7.10"]
在 :dependencies
键下。然后它将起作用:
> lein repl
Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
nREPL server started on port 38715 on host 127.0.0.1 - nrepl://127.0.0.1:38715
REPL-y 0.4.3, nREPL 0.6.0
Clojure 1.10.2-alpha1
demo.core=> (require '[clojure.tools.trace :as trace])
nil
有关其他依赖格式的信息,请参阅 the clojure.tools.trace GitHub page。
我总是通过从 git 克隆 this Clojure template project 来开始一个新的 Clojure 项目,然后将我的更改添加到 project.clj
,等等。然后您可以键入 lein repl
到启动一个 repl 会话。
由于您使用的是 clj
(Clojure CLI),因此您需要将 clojure.tools.trace
库添加到 deps.edn
文件中:
seanc@DESKTOP-30ICA76:~/clojure$ mkdir lyhokia
seanc@DESKTOP-30ICA76:~/clojure$ cd lyhokia/
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ vi deps.edn
<add the library>
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ cat deps.edn
{:deps {org.clojure/tools.trace {:mvn/version "0.7.10"}}}
seanc@DESKTOP-30ICA76:~/clojure/lyhokia$ clj
Clojure 1.10.1
user=> (require '[clojure.tools.trace :as trace])
nil
user=> (trace/trace (* 1 2 3))
TRACE: 6
6
user=>