由于某些原因,我无法使用jline使用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努力开始一个项目。
答案 0 :(得分:3)
我今天解决了同样的问题,从jline*.jar
移除了多余的/Library/Java/Extensions
,只在CLASSPATH
中安装了一个jline。
更长的解释:我正在尝试构建labrepl,它将所有依赖项安装在子目录lib
中,但我之前通过复制.jar文件来设置jline到/Library/Java/Extensions
。 Apparently,java.lang.ClassLoader
无法处理两个jline安装,只要有两个地方可用,命令行启动Clojure REPL将无法找到后一个类{{1 }和jline.ConsoleRunner
,具体取决于它们给clojure.main
命令的顺序。
我希望这会有所帮助。
答案 1 :(得分:1)
请参阅我在fork上安装的替代说明:
http://github.com/jedschneider/leiningen
我发送了拉取请求以更新自述文件,但没有收到回复。一旦你安装了lein,你可以将bin / leiningen.sh放在〜/ bin中并在任何地方调用它。我在.bash_profile上放了一个快捷方式
alias lein="~/bin/leiningen.sh"
然后调用lein repl
启动shell
还要检查labrepl,这是一个很好的学习工具。
答案 2 :(得分:0)
你的java ...
命令看起来很好,我会仔细检查所有的罐子是否在你认为应该的位置(并且它们是你认为的 罐子,即{ {1}}实际上是你在本地构建的,而不是一些超级过时的。)
如果您想将Leiningen用于clojure.jar
,那也是可能的。请注意,说“保持自己的Clojure版本”并不准确; Leiningen是一个构建工具,用作面向项目的工作流程的一部分,单独的Clojure jar是特定于项目的。要创建一个示例项目,请在lein repl
方便的地方使用。然后你需要lein new foo
,得到你的Clojure&带有cd foo
的contrib jar(lein deps
提供的project.clj
骨架已包含两者的条目)并使用lein new
启动REPL。
最后,你可以使用新的cljr
project;它有一个全面的自述文件,可以让你立刻开始,有了它,你就可以说lein repl
在任何地方获得一个Clojure REPL,而无需创建一个“项目”。
答案 3 :(得分:0)
我遇到了同样的问题。 jline.ConsoleRunner(至少关于我使用的jline-0.9.5)似乎无法在从'java'命令的-cp选项添加到类搜索路径的路径中找到类文件。这意味着它无法在当前目录中找到任何类。我通过复制/ Library / Java / Extensions /下的clojure.main解决了这个问题。