Clojure 1.9.0.jar用java -jar启动缺失spec/alpha文件,lein repl正常求因
问题原因分析
这个问题的核心在于Clojure 1.9.0引入的spec特性带来的依赖变化,以及Leiningen和直接java -jar启动时的类路径差异:
- 首先,Clojure 1.9.0开始将
clojure.spec.alpha纳入核心功能,但这个模块依赖另一个独立库clojure.core.specs.alpha。当你用Leiningen启动REPL时,它会自动解析并下载所有关联依赖(包括clojure.core.specs.alpha),并把这些依赖全部加入类路径,所以运行完全正常。 - 而直接用
java -jar 1.9.0/clojure-1.9.0.jar启动时,JVM的类路径里只有clojure-1.9.0.jar这一个文件,缺少了clojure.core.specs.alpha的jar包。当REPL启动时尝试加载spec相关的初始化代码,自然找不到对应的类文件,就抛出了那个异常。 - 至于1.8.0、1.6.0这些旧版本,它们根本没有引入spec特性,启动REPL不需要加载这些依赖类,所以直接
java -jar就能正常运行。
解决方法
你需要把clojure.core.specs.alpha的jar包加入类路径,改用java -cp命令启动:
假设clojure.core.specs.alpha-0.1.43.jar的路径是~/.m2/repository/org/clojure/clojure.core.specs.alpha/0.1.43/clojure.core.specs.alpha-0.1.43.jar,你可以在clojure目录下执行:
java -cp "1.9.0/clojure-1.9.0.jar:clojure.core.specs.alpha/0.1.43/clojure.core.specs.alpha-0.1.43.jar" clojure.main
这样就能正常启动1.9.0版本的REPL了。
内容的提问来源于stack exchange,提问作者teraspora
相关产品推荐
相关产品推荐

