2012-07-29 85 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來部署 。