2013-01-04 10 views
5

Ho creato un semplice esempio utilizzando:Lein uberjar fallisce con l'uso '-main' semplice, ma forse non capisco tutto ciò che sta facendo?

%> lein new lein-check 

ho modificato solo il codice in modo che ora ha un 'main':

(defproject lein-check "0.1.0-SNAPSHOT" 
    :description "FIXME: write description" 
    :url "http://example.com/FIXME" 
    :license {:name "Eclipse Public License" 
      :url "http://www.eclipse.org/legal/epl-v10.html"} 
    :main "lein-check.core" 
    :dependencies [[org.clojure/clojure "1.4.0"]]) 

(ns lein-check.core 
    (:gen-class)) 

(defn -main 
    "I don't do a whole lot." 
    [& args] 
    (println "Hello, World!")) 

Ma la prima volta che ho eseguito lein uberjar anche dopo un clean ottengo questo:

Compiling lein-check.core 
Exception in thread "main" java.lang.ClassCastException: 
    java.lang.String cannot be cast to clojure.lang.Symbol 
     at clojure.core$find_ns.invoke(core.clj:3659) 
     at clojure.core$load_one.invoke(core.clj:5228) 
     at clojure.core$compile$fn__4895.invoke(core.clj:5426) 
     at clojure.core$compile.invoke(core.clj:5425) 
     at user$eval7.invoke(NO_SOURCE_FILE:1) 
     at clojure.lang.Compiler.eval(Compiler.java:6511) 
     at clojure.lang.Compiler.eval(Compiler.java:6501) 
     at clojure.lang.Compiler.eval(Compiler.java:6477) 
     at clojure.core$eval.invoke(core.clj:2797) 
     at clojure.main$eval_opt.invoke(main.clj:297) 
     at clojure.main$initialize.invoke(main.clj:316) 
     at clojure.main$null_opt.invoke(main.clj:349) 
     at clojure.main$main.doInvoke(main.clj:427) 
     at clojure.lang.RestFn.invoke(RestFn.java:421) 
     at clojure.lang.Var.invoke(Var.java:419) 
     at clojure.lang.AFn.applyToHelper(AFn.java:163) 
     at clojure.lang.Var.applyTo(Var.java:532) 
     at clojure.main.main(main.java:37) 
Compilation failed: Subprocess failed 

Esecuzione di un follow-up uberjar però crea con successo la j ars:

Created ....\lein-check-0.1.0-SNAPSHOT.jar 
Including lein-check-0.1.0-SNAPSHOT.jar 
Including clojure-1.4.0.jar 
Created ....\lein-check-0.1.0-SNAPSHOT-standalone.jar 

A volte Uberjar esegue il main dopo un completamento? Dovrebbe farlo? Non sono abbastanza sicuro se si tratta di un errore dell'utente, un bug lein o un bug clojure.

risposta

3

Il problema è nella linea

:main "lein-check.core" 

Dovrebbe essere

:main lein-check.core 

Si sta utilizzando una stringa invece di un simbolo.

+0

destro - stesso che la mia risposta suppongo tranne Ho un simbolo citato' per il: principale, ed entrambi sembrano funzionare. – lucidquiet

2

Bene si scopre che il Lein Sample Project mostra il :main come un simbolo e non una stringa. Una volta aggiornato, il funzionamento di lein uberjar funziona come previsto.

Questa linea in particolare:

:main "lein-check.core"

cambiato a:

:main 'lein-check.core

Problemi correlati