'Jar Lein' e 'Lein uberjar' non impostare la principale classe correttamente
Domanda
Mi sono imbattuto lein uberjar
sul mio progetto e ha creato i file jar corrispondenti. Quando eseguo il vaso è gettato un ClassNotFoundException: explodingdots.core
. Ho specificato explodingdot.core
come la mia classe principale. Ho estratto il file jar e non c'era infatti alcun core.class
nella directory corrispondente. Quello che ho dimenticato?
Ho il seguente codice nel 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)))
Il contenuto della mia project.clj
è:
(defproject explodingdots "0.1" :dependencies [[org.clojure/clojure "1.2.0"] [org.clojure/clojure-contrib "1.2.0"]] :main explodingdots.core)
Nota: Sto usando Leiningen 1.3.1
Soluzione
Ok ho risolto il mio problema originale. E 'sorta di imbarazzante ammetterlo, ma penso che devo farlo per ragioni di completezza di questa discussione. Mi alzai mescolato con i miei sentieri. Ho lo stesso file all'interno di un progetto Netbeans e in un progetto di Leiningen. E io ero la modifica del file Netbeans. Siamo spiacenti.
Ma poi ho avuto un altro problema. Il metodo principale si trova ma ottengo un
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: core$-main
Ho provato a cambiare il mio metodo principale da
(defn -main [_] ...)
a (defn -main [& args] ...)
come Arthur ha suggerito, ma che non ha funzionato. Per risolvere questo problema ho scritto appena (defn -main[]...)
senza args.
Il problema successivo è stato quello di chiamare (init)
da (main)
ha provocato un errore. Ho lavorato in giro che, non chiamando (init)
a tutti, ma chiamando (exploding-dots)
direttamente da (main)
.
Quindi, per far funzionare tutto il mio aspetto src/explodingdots/core.clj
come
(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))
Per guardando la soluzione devo pensare, perché non mi scrivere che avanti a destra. E 'il più semplice e più modo dritto in avanti. Forse ho bisogno di una vacanza;)
.Altri suggerimenti
ho dovuto aggiungere un terzo componente per il mio principale spazio nome e spostare tutto nella sottodirectory com sotto src.
com.explodingdots.core
Dichiaro inoltre principale di prendere un vettore arg, non so se questo fa la diference:
(declare main)
(defn -main [& args]