Я использую lein run
без проекта, поэтому нет проекта .clj.
Если вы используете Leiningen, это будет намного проще, если вы создадите файл project.clj, который объявляет ваши зависимости. Leiningen будет читать project.clj и обрабатывать выборки всех недостающих зависимостей в вашем локальном репозитории Maven и добавлять их в classpath при запуске вашего REPL / приложения. (lein run
не работает для меня в каталоге без project.clj; я получаю ошибку: No :main namespace specified in project.clj.
. Вы имели в виду lein repl
?)
Когда мне требуется зависимость Clojure, которая, как я полагаю, должна просто работать - как clojure.data.json - я замечаю, что ее нет в моем каталоге .m2.
clojure.data.json не поставляется с Clojure - это отдельная зависимость, которую необходимо извлечь и добавить в ваш путь к классам, чтобы использовать ее. Путь к классам сообщает JVM, где искать файлы классов. Leiningen сделает обе эти вещи за вас, если вы объявите зависимость в project.clj:
:dependencies [[org.clojure/clojure "1.10.0"]
[org.clojure/data.json "0.2.6"]]
Вы также можете использовать команду lein deps
, если хотите получать только зависимости.
Вы можете создать новый / пустой проект Leiningen с помощью lein new project_name_goes_here
. Он будет содержать файл project.clj с несколькими шаблонными записями и ключом :dependencies
, в котором можно объявить зависимости.
Я понимаю сообщение об ошибке, но, не зная его местоположения или даже не зная, как правильно добавить его в CLASSPATH для REPL, чтобы увидеть его, я застрял. Это зависимость, которую мне все еще нужно установить? Если да, то как мне установить его, не проходя проект?
Вы можете вручную загрузить его из Интернета, а затем вручную добавить его путь к вашему classpath, но если вы уже используете Leiningen, гораздо проще добавить строку в файл project.clj и попросить Leiningen обработать это для вас.
Если использование файла project.clj без Leiningen невозможно, есть другие способы использовать Clojure и разрешать зависимости / создавать путь к классам во время выполнения. Boot поддерживает этот рабочий процесс, вы можете использовать Leiningen, как это с небольшим дополнительным усилием, а также более новый инструмент tools.deps . Есть примеры каждого из них в этом потоке ClojureVerse , но обратите внимание, что некоторые из этих подходов по сути делают то же самое, что и объявление зависимости в файле - вместо этого они объявляются как аргументы CLI.
Например, используя Clojure CLI tooling:
$ 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.edn, содержащий {:deps {org.clojure/data.json {:mvn/version \"0.2.6\"}}}
в том же каталоге, и clj
прочитает это, разрешит зависимости при необходимости и соответственно создаст путь к классам.