leiningen 不能 运行 因为 java class 未找到异常

leiningen cannot run because of java class not found exception

我最近——就像今天一样——对学习使用 clojure 进行编程产生了兴趣。现在,在安装了 java 的 jdk 的最新版本并下载了 leiningen 脚本之后,我按照后者的安装说明进行操作,特别是在 http:/www.lispcast.com/clojure-ubuntu.

现在,在 运行ning lein version 并下载相关的 jar 文件后,程序退出并出现有关 class 未找到的错误。有问题的错误内容如下:

Exception in thread "main" java.lang.ExceptionInInitializerError
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)>
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.core$load$fn__5677.invoke(core.clj:5893)
at clojure.core$load.invokeStatic(core.clj:5892)
at clojure.core$load.doInvoke(core.clj:5876)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core__init.load(Unknown Source)
at clojure.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForName(RT.java:2177)
at clojure.lang.RT.loadClassForName(RT.java:2196)
at clojure.lang.RT.load(RT.java:443)
at clojure.lang.RT.load(RT.java:419)
at clojure.lang.RT.doInit(RT.java:461)
at clojure.lang.RT.(RT.java:331)
at clojure.main.(main.java:20)
Caused by: java.lang.ClassNotFoundException: java/sql/Timestamp
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)
at clojure.lang.RT.classForName(RT.java:2168)
at clojure.lang.RT.classForNameNonLoading(RT.java:2181)
at clojure.instant$loading__5569__auto____6869.invoke(instant.clj:9)
at clojure.instant__init.load(Unknown Source)
at clojure.instant__init.(Unknown Source)
... 23 more

我的 java 9 jdk 安装在 /usr/lib/jvm/java-9-oracle/bin/java,我的 JAVA_HOME 变量设置为 /usr/lib/jvm/java-9-oracle 但我尝试 /usr/lib/jvm/java-9-oracle/bin 作为好吧,以防万一。我是 运行ning xubuntu 16.04.3,如果这有什么重要的话。我确实尝试将默认 java jdk 设置回与 xubuntu 捆绑在一起的 openjdk 但这也无济于事。

顺便说一句,整个问题的起源是因为我尝试 运行ning REPL 在 intellij 安装 cursive 插件后,它不起作用。然后我推测这可能是因为我没有事先安装 leiningen(我认为 IDE 和草书会把它捆绑在一起)。然而,关于 运行 成功所需的 intellij 和 clojure 的实际信息却让我望而却步,因为大部分信息都是 'scattered',我不确定我是否错过了一些东西。

无论如何,我都很难让一切正常工作——可能是因为我对这类问题还不是很了解,我只接触过 linux 发行版有一段时间,并且完全不熟悉 clojure。如果我遗漏了一些明显的东西,我深表歉意,但按理说,某些东西只有在被证明是显而易见的情况下才能变得明显。

我们将不胜感激任何和所有建议。

这看起来像是 Java 9 的新概念 "modules" 引起的问题:Clojure 期望能够访问 java.sql.Timestamp,但它不能。我没有跟上 Java 开发或 Clojure 开发的步伐,所以我不能肯定地说这是你的问题,但在我看来是这样。尝试使用较早的 JDK.

如果您无法降级 JAVA 版本,运行 lein 升级 2.8.1 或最新的 Leiningen 即可。 Leiningen 已更新为包括对 Java 9.

的支持