'lein jar' and 'lein uberjar' not setting the main-class properly
lein uberjar on my project and it created the corresponding jar files. When I run the jar a
ClassNotFoundException: explodingdots.core is thrown. I specified
explodingdot.core as my main class. I extracted the jar file and there was indeed no
core.class in the corresponding directory. What did I forget?
I have the following code in
(ns explodingdots.core (:import (java.awt Color Dimension Graphics2D AlphaComposite RenderingHints) (java.awt.event ActionListener MouseAdapter WindowAdapter) (javax.swing Timer JPanel JFrame)) (:gen-class)) [ ... ] (defn -init exploding-dots) (defn -main[_] (let [ed (new explodingdots.core)] (.init ed)))
The content of my
(defproject explodingdots "0.1" :dependencies [[org.clojure/clojure "1.2.0"] [org.clojure/clojure-contrib "1.2.0"]] :main explodingdots.core)
Note: I am using leiningen 1.3.1
Ok I solved my original problem. It is kind of embarassing to admit it, but I think I have to do it for the sake of completeness of this thread. I got mixed up with my paths. I have the same file within a Netbeans project and in a leiningen project. And I was editing the Netbeans file. Sorry.
But then I had an other problem. The main method is found but I get an
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$-main
I tried changing my main method from
(defn -main [_] ...) to
(defn -main [& args] ...) like Arthur suggested but that didn't work. To solve this I wrote just
(defn -main...) with no args.
The next problem was that calling
(main) resulted in an error. I worked around that by not calling
(init) at all but calling
(exploding-dots) directly from
So to make everything work my
src/explodingdots/core.clj looks like
(ns explodingdots.core (:import (java.awt Color Dimension Graphics2D AlphaComposite RenderingHints) (java.awt.event ActionListener MouseAdapter WindowAdapter) (javax.swing Timer JPanel JFrame)) (:gen-class)) [ ... ] (defn -main (exploding-dots))
By looking at the solution I have to think, why didn't I write that right ahead. It is the most simple and most straight forward way. Maybe I need a vacation ;).
I had to add a third component to my main name space and move everything into the com subdirectory under src.
I also declare main to take an arg vector, not sure if that makes a diference:
(declare main) (defn -main [& args]
I ran into this, and fixed it by adding
:gen-class to the corresponding missing class.
- Try adding options :main true :prefix "-" to the gen-class form.
- I'm pretty sure he shouldn't have to do that.
- In fact, I fixed a problem that looks very similar to this one by removing
- I also ran into the issue of needing a no-arg main method, thanks!