繁体   English   中英

clojure / lein REPL with jline

[英]clojure/lein REPL with jline

出于某种原因,我无法使用jj的clojure REPL,我做的是git克隆github上的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努力开始一个项目。

我今天通过从/Library/Java/Extensions删除冗余jline*.jar解决了同样的问题,只在CLASSPATH安装了一个jline。

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

我希望这有帮助。

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

http://github.com/jedschneider/leiningen

我发送了一个pull请求来更新自述文件,但没有收到回复。 一旦安装了lein,你可以将bin / leiningen.sh放在〜/ bin中并在任何地方调用它。 我在.bash_profile上放了一个快捷方式

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

然后调用lein repl启动shell

还要检查labrepl,这是一个很好的学习工具。

http://github.com/relevance/labrepl

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

如果你想使用Leiningen进行lein repl ,那也是可能的。 请注意,说“保持自己的Clojure版本”并不准确; Leiningen是一个构建工具,用作面向项目的工作流程的一部分,单独的Clojure jar是特定于项目的。 要创建一个示例项目来玩,可以说lein new foo方便了。 然后你需要cd foo ,用lein deps获取你的Clojure和contrib jars( lein new提供的project.clj骨架已经包含两个条目)并用lein repl启动一个REPL。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM