Почему возникает ошибка при импорте clojure.spec.alpha?

У меня есть проект boot-clj со следующими зависимостями:

 :dependencies   '[[org.clojure/clojure "RELEASE"]
                            [adzerk/boot-test "RELEASE" :scope "test"]]

В рамках этого проекта я запускаю boot repl и пытаюсь поэкспериментировать с clojure.spec.

В качестве первого шага я попытался импортировать необходимую зависимость, используя

(require '[clojure.spec.alpha :as s])

При этом я получаю следующую ошибку,

  java.lang.IllegalStateException: Attempting to call unbound fn: #'clojure.core/ident? 

java.lang.ExceptionInInitializerError:

Что это значит? И как это исправить?


person Kannan Ramamoorthy    schedule 22.08.2019    source источник
comment
Это может помочь, github.com/boot-clj/boot/wiki/ Настройка-Clojure-версия   -  person glts    schedule 22.08.2019


Ответы (2)


Я пропустил указанную ниже ошибку при запуске boot repl,

Конфликт пути к классам: org.clojure/clojure версии 1.8.0 уже загружены, НЕ загружается версия 1.10.1

Как было предложено здесь, мне пришлось добавить boot.properties с содержимым BOOT_CLOJURE_VERSION=1.10.1, чтобы решить эту проблему.

Уточняю это, неудивительно, что спецификация не работала в приведенном выше REPL, потому что спецификация ожидает Clojure 1.9.0 или выше.

И причиной ошибки может быть то, что clojure.core/ident? недоступен в 1.8.0

person Kannan Ramamoorthy    schedule 23.08.2019

Попробуйте следующее:

[org.clojure/clojure "1.10.1"]
[adzerk/boot-test "1.2.0"]

Использование "RELEASE" вместо конкретного номера версии проблематично, так как это приводит к неповторяемым сборкам.

Я бы также рекомендовал время от времени использовать lein-ancient, чтобы уведомить вас, когда версию зависимости необходимо обновить.

https://github.com/xsc/lein-ancient


Дополнительную информацию можно найти здесь:

person Alan Thompson    schedule 22.08.2019
comment
deprecated подразумевает, что это было раньше, но RELEASE (или ПОСЛЕДНЯЯ) никогда не была поддерживаемой функцией deps.edn, поскольку она не позволяет вам создавать фиксированный набор отложений (и, таким образом, нарушает кеш). - person Alex Miller; 22.08.2019
comment
«Устаревший» не объясняет причину этой ошибки. - person Kannan Ramamoorthy; 22.08.2019