5

以下を使用して簡単な例を作成しました。

%> lein new lein-check

コードを変更しただけで、「メイン」が追加されました。

(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!"))

lein uberjarしかし、私がこれを取得した後でも初めて実行するcleanとき:

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

フォローアップを実行するuberjarと、jarが正常に作成されます。

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

完了後にuberjarがメインを実行することがありますか?それをすることになっていますか?これがユーザーエラーなのか、leinバグなのか、clojureのバグなのかはよくわかりません。

4

2 に答える 2

3

問題はラインにあります

 :main "lein-check.core"

そのはず

 :main lein-check.core

記号の代わりに文字列を使用しています。

于 2013-01-04T18:47:17.240 に答える
2

Leinサンプルプロジェクト:mainでは、が文字列ではなく記号として表示されていることがわかりました。これが更新されると、実行lein uberjarは期待どおりに機能します。

特にこの行:

:main "lein-check.core"

に変更されました:

:main 'lein-check.core

于 2013-01-04T18:48:01.787 に答える