2012-07-29 68 views
3

我正在运行Debian Wheezy,openjdk-7-jre,clojure 1.4.0和leiningen-1.7.1,它们都是从官方的repo安装的。如何运行leiningen创建的项目?

于是我就

lein new hello 
cd hello 
lein run -m hello.core 

,看到一个错误:

Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: hello.core 
at clojure.lang.Util.runtimeException(Util.java:165) 
at clojure.lang.RT.classForName(RT.java:2017) 
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:206) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:92) 
at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:225) 
at user$eval35.invoke(NO_SOURCE_FILE:1) 
at clojure.lang.Compiler.eval(Compiler.java:6465) 
at clojure.lang.Compiler.eval(Compiler.java:6455) 
at clojure.lang.Compiler.eval(Compiler.java:6431) 
at clojure.core$eval.invoke(core.clj:2795) 
at clojure.main$eval_opt.invoke(main.clj:296) 
at clojure.main$initialize.invoke(main.clj:315) 
at clojure.main$null_opt.invoke(main.clj:348) 
at clojure.main$main.doInvoke(main.clj:426) 
at clojure.lang.RestFn.invoke(RestFn.java:421) 
at clojure.lang.Var.invoke(Var.java:405) 
at clojure.lang.AFn.applyToHelper(AFn.java:163) 
at clojure.lang.Var.applyTo(Var.java:518) 
at clojure.main.main(main.java:37) 
Caused by: java.lang.ClassNotFoundException: hello.core 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:264) 
at clojure.lang.RT.classForName(RT.java:2013) 
... 21 more 

我从来没有用Java写之前任何所以这对我来说是很神秘的。 我试图

:main hello.core 

添加到我的project.clj文件,然后就

lein run 

但它并没有帮助我。

回答

11

要运行main功能,确保hello.core包含-main方法是这样的:

(ns hello.core) 

(defn -main 
    [& args] 
    (println "Hello, World!")) 

,您可以用-m标志运行:lein run -m hello.core

或者,如果你指定它的名字就可以执行任意功能:

(ns hello.core) 

(defn my-run 
    [& args] 
    (println "Hello, World! from Run")) 

而且与命名空间/函数名调用它作为参数:

lein run -m hello.core/my-run 
+0

谢谢!这真的帮助了我。 – skaurus 2012-07-29 18:07:40

4

你可能要开始:

lein new app hello 

这应该为存根主方法创建一个框架项目设置。 它也会放在正确的地方,所以你可以使用uberjar来部署 。