Ich habe vor kurzem mit Clojure begonnen, und ich benutze Leiningen, um ein kleines Projekt zu erstellen. Ich habe Probleme damit, sich mit Befehlszeilenargumenten zu verhalten. Im Folgenden ist mein src/project/core.clj
Kommandozeilenargumente mit Leiningen
(ns project.core
(:gen-class))
(defn -main [& args]
(println (apply str args)))
und meine project.clj
(defproject project "1.0.0-SNAPSHOT"
:description "FIXME: write"
:main project.core
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]])
Wenn ich jetzt lein run arg1 arg2
laufen, es gibt mir diese Fehlermeldung:
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: arg1 in this context (NO_SOURCE_FILE:1)
at clojure.lang.Compiler.analyze(Compiler.java:5205)
at clojure.lang.Compiler.analyze(Compiler.java:5151)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3057)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:5371)
at clojure.lang.Compiler.analyze(Compiler.java:5190)
at clojure.lang.Compiler.analyze(Compiler.java:5151)
at clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:4670)
at clojure.lang.Compiler$FnMethod.parse(Compiler.java:4328)
at clojure.lang.Compiler$FnExpr.parse(Compiler.java:3173)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:5367)
at clojure.lang.Compiler.analyze(Compiler.java:5190)
at clojure.lang.Compiler.eval(Compiler.java:5421)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.eval(Compiler.java:5391)
at clojure.core$eval.invoke(core.clj:2382)
at clojure.main$eval_opt.invoke(main.clj:235)
at clojure.main$initialize.invoke(main.clj:254)
at clojure.main$null_opt.invoke(main.clj:279)
at clojure.main$main.doInvoke(main.clj:354)
at clojure.lang.RestFn.invoke(RestFn.java:422)
at clojure.lang.Var.invoke(Var.java:369)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.main.main(main.java:37)
Caused by: java.lang.Exception: Unable to resolve symbol: arg1 in this context
at clojure.lang.Compiler.resolveIn(Compiler.java:5677)
at clojure.lang.Compiler.resolve(Compiler.java:5621)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:5584)
at clojure.lang.Compiler.analyze(Compiler.java:5172)
... 23 more
Wenn ich jedoch eine lein uberjar
tun und dann do java -jar project-1.0.0-SNAPSHOT-standalone.jar arg1 arg2
, bekomme ich die richtige Ausgabe.
arg1arg2
Es ist nicht sehr angenehm zu haben uberjar zu schaffen es jedes Mal zu laufen, während der Entwicklung, gibt es einen besseren Weg?
versuchen lein Lauf project.core arg1 arg2 – PheliX
@PheliX, yep, dass einige Blei gab, gibt es 'Klasse project.corearg1arg2', aber die uberjar gibt's arg1arg2 '... sieht aus wie ein Fortschritt, aber noch nicht ganz brauchbar. Das, oder ich vermisse etwas. –