【问题标题】:Lein uberjar fails on simple '-main' usage, but perhaps I don't understand all it's doing?Lein uberjar 在简单的“-main”用法上失败了,但也许我不明白它在做什么?
【发布时间】:2013-01-04 17:25:25
【问题描述】:

我创建了一个简单的例子:

%> lein new lein-check

我只是修改了代码,使它现在有一个'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!"))

但我第一次运行 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

虽然成功创建了 jar,但运行后续 uberjar

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 有时会在完成后运行 main 吗?它应该这样做吗?我不太确定这是用户错误、lein 错误还是 clojure 错误。

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

    问题出在一行

     :main "lein-check.core"
    

    应该是

     :main lein-check.core
    

    您使用的是字符串而不是符号。

    【讨论】:

    • 对 - 与我想的答案相同,除了我为 :main 引用了 ' 符号,而且它们似乎都有效。
    【解决方案2】:

    原来Lein Sample Project:main 显示为符号而不是字符串。更新后,运行 lein uberjar 将按预期工作。

    尤其是这一行:

    :main "lein-check.core"

    改为:

    :main 'lein-check.core

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 2023-04-06
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 2012-02-20
      相关资源
      最近更新 更多