6

出于某种原因,我无法让 clojure REPL 与 jline 一起使用,我所做的是从 github 上 git clone clojure 存储库,然后运行 ​​ant 来构建它,然后我将 jline-0.9.94.jar 下载到带有 clojure.jar 的目录中,然后运行以下命令:

java -cp jline-0.9.94.jar:clojure.jar jline.ConsoleRunner clojure.main

并得到以下错误:

    Exception in thread "main" java.lang.ClassNotFoundException: clojure.main
 at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:317)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:375)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:164)
 at jline.ConsoleRunner.main(Unknown Source)

以下是我当前目录中的文件:

vvshs-macbook-2:clojure vvsh$ ls
build.xml                                 clojure-sources-1.2.0-master-SNAPSHOT.jar epl-v10.html                              src
classes                                   clojure-sources.jar                       jline-0.9.94.jar                          test
clojure-1.2.0-master-SNAPSHOT.jar         clojure.iml                               pom-template.xml
clojure-slim-1.2.0-master-SNAPSHOT.jar    clojure.jar                               pom.xml
clojure-slim.jar                          doc                                       readme.txt
vvshs-macbook-2:clojure vvsh$ 

我在 clojure 1.1 和 lein repl 上遇到了同样的错误(似乎 lein 维护了自己的 clojure 版本)。

顺便说一句,这是在 mac ox 10.5.8 上

java version "1.5.0_24"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_24-b02-357-9M3165)
Java HotSpot(TM) Client VM (build 1.5.0_24-149, mixed mode, sharing)

有人知道出了什么问题以及如何解决吗?因为我真的想让 lein repl 开始一个项目。

4

4 回答 4

3

我今天解决了同样的问题,删除了一个多余jline*.jar/Library/Java/Extensions,只留下一个 jline 安装CLASSPATH

更长的解释:我正在尝试构建labrepl,它将所有依赖项安装在 subdirectory 中lib,但我之前通过将 .jar 文件复制到 .jar 文件来设置 jline /Library/Java/Extensions显然java.lang.ClassLoader无法处理 jline 的两个安装,只要两个地方都有可用的,启动 Clojure REPL 的命令行将无法找到后一个类jline.ConsoleRunnerclojure.main,具体取决于它们被赋予java命令的顺序.

我希望这有帮助。

于 2010-07-11T13:48:29.113 回答
1

请参阅我在 fork 上安装的替代说明:

http://github.com/jedschneider/leiningen

我发送了一个拉取请求来更新自述文件,但没有得到回复。安装 lein 后,您可以将 bin/leiningen.sh 放入 ~/bin 并在任何地方调用它。我在我的 .bash_profile 上放了一个快捷方式

alias lein="~/bin/leiningen.sh"

然后调用lein repl启动一个shell

还可以查看 labrepl,这是一个很棒的学习工具。

http://github.com/relevance/labrepl

于 2010-07-10T11:49:40.213 回答
0

您的java ...命令看起来不错,我会仔细检查所有罐子是否都在您认为它们应该在的位置(并且它们是您认为它们所在罐子,即clojure.jar实际上是您在本地构建的罐子,而不是一些超级过时的罐子)。

如果您想将 Leiningen 用于lein repl,那也是可能的。请注意,说它“维护自己的 Clojure 版本”是不准确的;Leiningen 是一个构建工具,用作面向项目的工作流的一部分,单独的 Clojure jar 是项目特定的。要创建一个示例项目来玩,说一个lein new foo方便的地方。然后,您需要使用(提供的骨架已经包含两者的条目)cd foo获取您的 Clojure 和 contrib jar,并使用.lein depsproject.cljlein newlein repl

最后,您可以使用新cljr项目;它有一个全面的自述文件,可以让您立即开始使用它,您可以说cljr repl在任何地方获得 Clojure REPL,而无需创建“项目”。

于 2010-07-10T13:13:07.683 回答
0

我遇到了同样的问题。jline.ConsoleRunner(至少大约我使用的 jline-0.9.5)似乎无法在从“java”命令的 -cp 选项添加到类搜索路径的路径中找到类文件。这意味着它在当前目录中找不到任何类。我也通过在 /Library/Java/Extensions/ 下复制 clojure.main 解决了这个问题。

于 2010-11-28T12:05:44.310 回答