‚Lein jar‘ und ‚lein uberjar‘ nicht die Hauptklasse Einstellung richtig
Frage
lief ich lein uberjar
auf mein Projekt und es erstellt die entsprechenden JAR-Dateien. Als ich das Glas ein ClassNotFoundException: explodingdots.core
ausgeführt wird geworfen. I angegebenen explodingdot.core
als meine Hauptklasse. Ich extrahierte die JAR-Datei, und es war in der Tat kein core.class
in dem entsprechenden Verzeichnis. Was habe ich vergessen?
Ich habe den folgenden Code in src/explodingdots/core.clj
(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)))
Der Inhalt meiner project.clj
ist:
(defproject explodingdots "0.1" :dependencies [[org.clojure/clojure "1.2.0"] [org.clojure/clojure-contrib "1.2.0"]] :main explodingdots.core)
Hinweis: Ich bin mit Leiningen 1.3.1
Lösung
Ok Ich löste mein ursprüngliches Problem. Es ist eine Art, es zuzulassen peinlich, aber ich denke, dass ich es aus Gründen der Vollständigkeit dieses Threads zu tun haben. Ich habe gemischte mit meinen Wegen. Ich habe die gleiche Datei in einem Netbeans-Projekt und in einem Leiningen-Projekt. Und ich war die Bearbeitung der Netbeans-Datei. Es tut uns Leid.
Aber dann hatte ich ein anderes Problem. Die wichtigste Methode ist gefunden, aber ich erhalte ein
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$-main
Ich habe versucht, meine Hauptmethode Wechsel von
(defn -main [_] ...)
zu (defn -main [& args] ...)
wie Arthur vorgeschlagen, aber das hat nicht funktioniert. Um dies zu lösen ich nur (defn -main[]...)
ohne args geschrieben.
Das nächste Problem war, dass (init)
von (main)
Aufruf zu einem Fehler geführt hat. Ich arbeitete um, dass durch nicht (init)
überhaupt telefonieren aber (exploding-dots)
direkt von (main)
aufrufen.
Also alle Arbeit meiner src/explodingdots/core.clj
sieht aus wie
(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))
Mit dem bei der Lösung sucht ich denken, warum nicht schrieb ich dieses Recht vor. Es ist die einfachste und direkteste Weg. Vielleicht brauche ich einen Urlaub;)
.Andere Tipps
Ich hatte eine dritte Komponente zu meinem Haupt-Namensraum und Bewegung alles in das com-Unterverzeichnis unter src hinzuzufügen.
com.explodingdots.core
Ich erkläre auch Haupt einen arg Vektor zu nehmen, nicht sicher, ob das eine diference macht:
(declare main)
(defn -main [& args]