Как загрузить один файл clojure с зависимостями, используя Clojure REPL (La Clojure)?
Я использую плагин La Clojure для IntelliJ IDEA, чтобы загрузить мой файл clj, а затем получить функцию внутри этого файла. Мой файл Test.clj имеет следующее содержимое:
(ns test.Test
(:require [clojure.tools.logging :as logger])
)
(defn addx [a b c]
(logger/debug "adding...")
(+ a b c))
На консоли Clojure REPL я пытаюсь загрузить файл:
(load-file "/home/.../test/Test.clj")
Это дает мне следующую ошибку:
FileNotFoundException Не удалось найти clojure/tools/logging__init.class или clojure/tools/logging.clj по пути к классам: clojure.lang.RT.load (RT.java:443)
Может кто-нибудь сказать мне, что я делаю не так?
Спасибо.
1 ответ
Что приводит к ошибке, так это то, что classpath (тот, который использовался для запуска Clojure REPL) не включает clojure.tools.logging
библиотека. Test.clj
требует, поэтому REPL при загрузке не может найти требуемый пакет, следовательно, ошибка.
Я не уверен, как вы запускаете REPL, но остальная часть ответа предполагает, что это обычный REPL в терминале (не из самой IntelliJ IDEA; если REPL запускается из IntelliJ IDEA - я бы сказал, что это неверная конфигурация последней, поскольку предполагается, что REPL запускается с правильным путем к классу проекта - первым делом нужно проверить конфигурацию проекта).
Чтобы это исправить, убедитесь, что у REPL есть все зависимости (в данном случае - clojure.tools.logging
) в классе. Например, возможно, самое простое, что можно сделать, это добавить project.clj
с объявленными в нем зависимостями и используйте Lieningen для запуска REPL. Голые кости project.clj
что бы сделать трюк это:
(defproject my-project "0.0.1-SNAPSHOT"
:dependencies [[org.clojure/tools.logging "0.3.1"]])
Теперь из того же каталога, где project.clj
в:
$ lein repl
...
user=> (load-file "Test.clj")
#'test.Test/addx
user=> (test.Test/addx 13 9 20)
42
Или, если вы хотите использовать "чистый Clojure REPL без Leiningen", у вас должны быть локальные файлы зависимостей jar (например, загрузка из Maven Central), а затем вы можете добавить их classpath при запуске REPL:
$ java -cp /path/to/clojure.jar:/path/to/tools.logging-0.3.1.jar clojure.main
и это должно обычно давать тот же результат.