运行clojure-1.9.0.jar的异常:缺少clojure / spec / alpha__init.class和clojure / spec / alpha.clj

时间:2018-03-25 13:11:45

标签: java clojure

Leiningen将clojure-1.9.0.jar作为依赖项下载。它位于~/.m2/repository/org/clojure/clojure/1.9.0。通过lein repl工作正常。

但是,如果(从~/.m2/repository/org/clojure/clojure我运行java -jar 1.9.0/clojure-1.9.0.jar,而不是预期的行为(启动REPL),我会得到一个例外:

Could not locate clojure/spec/alpha__init.class or clojure/spec/alpha.clj on classpath.

对于其他Clojure版本(1.8.0,1.6.0,1.4.0),我按预期获得了一个REPL。

那么clojure-1.9.0.jar - 或者我的设置 - 还是我的理解有什么不对?

注意:
如果我在包含具有Clojure 1.9.0依赖项的项目的目录中运行lein repl,我会得到一个带有Clojure 1.9.0的REPL,但是如果我从任何其他目录启动Leiningen,我会得到一个带有Clojure 1.8.0的REPL。在这两种情况下,REPL版本都是REPL-y 0.3.7, nREPL 0.2.12。 正在运行lein upgrade会生成消息Leiningen is already up-to-date.

2 个答案:

答案 0 :(得分:4)

Clojure 1.9.0模块化,规范支持分解为必须在类路径上的两个单独的JAR。

请参阅https://clojure.org/news/2017/12/08/clojure19

正如Alex Miller指出的那样,新的clj工具会自动为您解决此问题。

答案 1 :(得分:0)

这些类已被拆分,你可以下载丢失的jar:

  

spec.alpha - 。####罐

here