How to define project.clj for both lein run and lein repl to work?

clojure

Solution

One thing you could do to get it to work would be to change `core.clj` to:

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

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

(defn -main []
  (hello))

And edit the `project.clj` to:

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

The `(:gen-class)` will tell the compiler to generate a Java class for the namespace, and the `:main` directive in `project.clj` will tell `lein run` to run the main method on the class, which is given by `-main`. Why `lein repl` was failing to find `my-project.core/hello` is unclear to me, but I don't know much about leiningen internals.

Problem

I'm new to Clojure, and I don't quite understand how to write my `project.clj` so it works for both `lein repl` and `lein run`. Here it is (whole path: `~/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 ) ``` Then I have my `~/my-project/src/my_project/core.clj` file ``` (ns my-project.core) (defn hello [] (println "Hello world!") ) ``` `lein run` works just fine but I get a `FileNotFoundException` when running `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=> ``` How should I edit the `project.clj` to solve this? Or do I have to call `lein repl` in a different way? Thanks in advance. EDIT: tried with `lein dep`s and `lein compile`, but still the same error ``` ~/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) ```

Original source