【发布时间】:2011-10-16 00:05:32
【问题描述】:
我是 clojure 的初学者,昨天才开始。
我收集到创建独立应用程序的简单方法是使用 leiningen lein new foo。
我尝试使用 leiningen 创建一个 hello world 测试项目。我在 project.clj 中添加了 :main 和 :aot 指令,在 core.clj 文件中添加了 :gen-class 并尝试了lein run,但我收到关于找不到类定义的错误。
Exception in thread "main" java.lang.NoClassDefFoundError:
Caused by: java.lang.ClassNotFoundException:
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
core.clj 文件
(ns test.core
(:gen-class))
(defn -main [& args] (println "Hello main"))
还有project.clj文件
(defproject test "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:main test.core
:aot [test.core]
:dependencies [[org.clojure/clojure "1.2.1"]])
编辑:经过进一步测试,似乎将项目复制到我的桌面上可以正常工作,我认为这表明我的笔记本电脑上的环境有些糟糕,但我不知道如何。
桌面环境是来自 repositories 的 clojure 和来自 AUR 的 leiningen。在笔记本电脑上,clojure 来自 clojure.org,而 leining 来自 github。
【问题讨论】:
-
您的 CLASSPATH 设置为什么?
-
@deong 我的 $HOME/bin/clj 文件有“CLASSPATH=.:$CLASSPATH”
-
如果您只是在 shell 中执行“export CLASSPATH=.:$CLASSPATH”然后运行“lein run”会发生什么?我不相信 leiningen 调用 clj shell 脚本来运行你的程序。我认为它直接以clojure jar文件作为参数调用java。
-
@deong 还是一样。或者更确切地说,它甚至无法创建 jar 文件。 lein compile 给出同样的错误
-
嗯...那我画个空白。 clojure 代码对我来说很合适。
标签: clojure classnotfoundexception leiningen