Не удалось найти clojure / data / json: как мне получить REPL, чтобы увидеть эту (и аналогичные) зависимости - PullRequest
0 голосов
/ 15 января 2019

Я использую lein repl без проекта , поэтому нет project.clj.

Я запускаю Leiningen 2.8.1 на Java 1.8.0_191 Виртуальная 64-битная серверная виртуальная машина OpenJDK.

Когда мне требуется зависимость Clojure, которая, как я предполагаю, должна просто работать - как clojure.data.json - я замечаю, что ее нет в моем каталоге .m2 . Вот почему я получаю FileNotFoundException Could not locate clojure/data/json__init.class or clojure/data/js on.clj on classpath? Я не могу найти там другие свои зависимости Clojure, поэтому я не знаю, где они находятся и должна ли эта зависимость быть в .m2 или нет.

Я понимаю сообщение об ошибке, но, не зная его местоположения и даже не зная, как правильно добавить его в CLASSPATH для REPL, чтобы увидеть его, я застрял.

Это зависимость, которую мне все еще нужно установить? Если это так, то как мне установить его без прохождения проекта?

Я не понимаю JVM, поскольку я новичок в этом, поэтому добавьте немного дополнительной информации в свой ответ.


Я смотрел на это , это , это , это и это . Я не знаю, пропускаю ли я что-нибудь, поэтому ваша помощь будет по-настоящему оценена.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Это отличная возможность использовать lein try. Как только вы добавите его в свой ~/.lein/profiles.clj, вы просто запустите: lein try org.clojure/data.json, и вас встретит запущенный REPL с этой зависимостью, просто требующей отсутствия.

0 голосов
/ 15 января 2019

Я использую 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 прочитает это, разрешит зависимости при необходимости и соответственно создаст путь к классам.

...