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

War es hilfreich?

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

machen
(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]    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top