質問

私は最近Clojureから始めました。私はLeiningenを使用して小さなプロジェクトを作成しています。私は、ライニンゲンをコマンドラインの引数で振る舞わせるのに苦労しています。以下は私です src/project/core.clj

(ns project.core
    (:gen-class))

(defn -main [& args]
    (println (apply str args)))

と私 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"]])

今走ったとき lein run arg1 arg2, 、それは私にこのエラーを与えます:

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

ただし、私がする場合 lein uberjar そして、します java -jar project-1.0.0-SNAPSHOT-standalone.jar arg1 arg2, 、正しい出力を取得します。

arg1arg2

開発中に毎回それを実行するためにUberjarを作成する必要があるのはそれほど快適ではありませんが、より良い方法はありますか?

役に立ちましたか?

解決

これは、Gitで修正されたバグが原因であるように見えます。修正は1.4.2になり、数日後には発売されるはずです。その間、ここで説明する回避策を使用できます。 http://groups.google.com/group/clojure/msg/a8160b23a5019a12

他のヒント

から レインラン: :「argsは *command-line-args *として渡されます」

したがって、それらを使用する必要があります。サイトの例は、その方法を示しています。あなたが今あなたがあなたを渡している議論をあなたに渡しているなら、あなたもあなたのプロジェクトのそれらを指定するためにrun-aliaseを使用します。繰り返しますが、前述のサイトにはすべての情報があります。

私のサンプルproject.clj

    (defproject addressbook "1.0.0-SNAPSHOT"
  :description "FIXME: write"
  :main addressbook.core
  :run-aliases {:addressbook [addressbook.core -main "arg1"]}
  :dependencies [[org.clojure/clojure "1.2.0"]
                 [org.clojure/clojure-contrib "1.2.0"]]
  :dev-dependencies [[lein-run "1.0.0"]])

とテストコード:

(ns addressbook.core
  (:gen-class))

(defn -main [& [args]]
  (if args (println args)))

どちらも「Lein Uberjar」として「Lein Run AddressBook Foo」が私のために働いています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top