运行clojure-1.9.0.jar时出现异常:缺少clojure/spec/alpha__init.class和clojure/spec/alpha.clj。

4

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.


1
尝试使用新的 clj 命令行工具进行基本的 REPL - 请参阅 https://clojure.org/guides/getting_started 进行安装。 - Alex Miller
尽管我的问题特别涉及在Windows上运行Clojure 1.9的问题,但其中一些信息可能对您有帮助- 请参见此问题的已接受答案 - Bob Jarvis - Слава Україні
2个回答

6

Clojure 1.9.0已经模块化,支持spec被分成两个独立的JAR文件,这两个文件必须在你的classpath中。

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

Alex Miller指出,新的clj工具将自动为您处理此问题。


1

这些类已被拆分,您可以在此下载缺失的JAR包:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接