【问题标题】:Why there is error in importing clojure.spec.alpha?为什么导入 clojure.spec.alpha 会出错?
【发布时间】:2019-08-22 17:51:18
【问题描述】:

我有一个带有以下依赖项的 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:

这是什么意思?以及如何解决?

【问题讨论】:

标签: clojure clojure.spec


【解决方案1】:

我在运行boot repl 时没有注意到以下错误,

类路径冲突:org.clojure/clojure 版本 1.8.0 已加载, 未加载 1.10.1 版

按照here 的建议,我必须添加boot.properties 和内容BOOT_CLOJURE_VERSION=1.10.1 才能解决它。

澄清一下,难怪规范在上述 REPL 中不起作用,因为规范需要 Clojure 1.9.0 或更高版本。

而错误的原因可能是clojure.core/ident?1.8.0中不可用

【讨论】:

    【解决方案2】:

    尝试以下方法:

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

    使用"RELEASE" 而不是具体的版本号是有问题的,因为它会导致不可重复的构建。

    我还建议偶尔使用lein-ancient 来通知您何时需要更新依赖项的版本。

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


    您可以在此处找到更多信息:

    【讨论】:

    • "deprecated" 暗示这是以前的事情,但 "RELEASE" (或 "LATEST") 从来不是 deps.edn 支持的功能,因为它会阻止您创建一组固定的 deps (从而破坏缓存)。
    • 'Deprecated' 没有解释该错误的原因。
    猜你喜欢
    • 2020-07-28
    • 2022-08-18
    • 2021-12-23
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2020-11-05
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多