如何为lein run和lein repl定义project.clj工作?

m0s*_*it0 8 clojure

我是Clojure的新手,我不太明白如何写我的,project.clj所以它适用于lein repllein run.这是(整个路径:) ~/my-project/project.clj:

(defproject my-project "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]]
  :main my-project.core/hello
)
Run Code Online (Sandbox Code Playgroud)

然后我有我的~/my-project/src/my_project/core.clj档案

(ns my-project.core)

(defn hello []
  (println "Hello world!")
)
Run Code Online (Sandbox Code Playgroud)

lein run工作正常,但我FileNotFoundException跑步时得到lein repl:

~/my-project$ lein run
Hello world!
~/my-project$ lein repl
REPL started; server listening on localhost port 42144
FileNotFoundException Could not locate hello__init.class or hello.clj on classpath:   clojure.lang.RT.load (RT.java:430)
clojure.core=>
Run Code Online (Sandbox Code Playgroud)

我该怎么编辑project.clj来解决这个问题?或者我必须以lein repl不同的方式打电话?

提前致谢.

编辑:尝试与lein deps lein compile,但仍然是相同的错误

~/my-project$ lein version
Leiningen 1.7.1 on Java 1.6.0_27 OpenJDK Client VM
~/my-project$ lein deps
Copying 1 file to /home/yasin/Programming/Clojure/my-project/lib
~/my-project$ lein compile
No namespaces to :aot compile listed in project.clj.
~/my-project$ lein repl
REPL started; server listening on localhost port 41945
FileNotFoundException Could not locate hello__init.class or hello.clj on classpath:   clojure.lang.RT.load (RT.java:430)
Run Code Online (Sandbox Code Playgroud)

ToB*_*ced 15

你可以做的一件事就是改变core.clj:

(ns my-project.core
  (:gen-class))

(defn hello []
  (println "Hello world!"))

(defn -main []
  (hello))
Run Code Online (Sandbox Code Playgroud)

并编辑project.clj为:

(defproject my-project "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]]
  :main my-project.core)
Run Code Online (Sandbox Code Playgroud)

(:gen-class)会告诉编译器生成的命名空间的Java类,并:main指示在project.clj将告诉lein run运行的类,它由下式给出的主要方法-main.为什么lein repl未能找到my-project.core/hello我不清楚,但我不太了解leiningen内部.