Не удалось импортировать зависимость «clojure.tools.trace» в REPL в Clojure: файл не найден

#clojure #dependencies #read-eval-print-loop

#clojure #зависимости #чтение-оценка-печать-цикл

Вопрос:

Я новичок в 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]]}
 

Я искал документы clojure.tools.trace на Github.

В нем говорится, что вам нужна зависимость импорта, но информация о зависимостях предназначена для Clojure CLI, Leiningen или Maven, а не для REPL в clojure.

(Когда я говорю REPL в clojure, я на самом деле имею в виду clj , извините за расплывчатое описание)

Поэтому я застрял здесь. Кто-нибудь может сказать мне, как это исправить и что происходит?

Ответ №1:

Поскольку вы используете 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=>
 

Ответ №2:

Если вы используете 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
 

Смотрите страницу clojure.tools.trace на GitHub для получения информации о других форматах зависимостей.


Я всегда начинаю новый проект Clojure, клонируя этот проект шаблона Clojure из git, затем добавляя свои изменения project.clj и т.д. Затем вы можете ввести lein repl , чтобы запустить сеанс repl.

Комментарии:

1. На самом деле я бегу clj , а не lein repl , извините за расплывчатое описание.