在Clojure中编译 - Redis / Carmine

时间:2017-01-04 11:10:21

标签: clojure redis carmine

我对Carmine uberjar编译(lein with-profile embed uberjar)有疑问。答案可能很简单,但我没有得到其他论坛的任何帮助。 lein ring server-headless 8080正常运行。如果我运行此命令lein with-profile embed uberjar,那么我收到此错误消息。你能帮帮我,正确的设置是什么?

提前致谢, RRR

(defproject fu "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :min-lein-version "2.0.0"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [ring "1.3.2"]
                 [compojure "1.5.1"]
                 [ring/ring-defaults "0.2.1"]
                 [hiccup "1.0.5"]
                 [selmer "1.10.3"]
                 [com.cemerick/friend "0.2.0"]
                 [de.ubercode.clostache/clostache "1.4.0"]
                 [com.taoensso/carmine "2.15.0"]]
  :main fu.handler
  :plugins [[lein-ring "0.9.7"]]
  :ring {:handler fu.handler/app
         :auto-reload? true
         :auto-refresh? true}
  :aot [fu.handler]
  :uberjar-name "fu-example-default.jar"
  :profiles {
             :provided {:dependencies [[nginx-clojure "0.4.4"]]}
             :dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                                  [ring/ring-mock "0.3.0"]]}
             :embed {:dependencies 
                       [[nginx-clojure/nginx-clojure-embed "0.4.4"]]
                     :aot [fu.handler]
                     :main  fu.handler
                     :uberjar-name "fu-example-embed.jar"
                     }
})  

错误消息:

lein with-profile嵌入uberjar 警告:您目前以root身份运行;可能是偶然的。 按control-C中止或按Enter以root身份继续。 设置LEIN_ROOT以禁用此警告。

Compiling fu.handler
Compiling fu.handler
nil
Exception in thread "main" java.lang.ExceptionInInitializerError, compiling:(/tmp/form-init8960082151990763547.clj:1:73)
    at clojure.lang.Compiler.load(Compiler.java:7391)
    at clojure.lang.Compiler.loadFile(Compiler.java:7317)
    at clojure.main$load_script.invokeStatic(main.clj:275)
    at clojure.main$init_opt.invokeStatic(main.clj:277)
    at clojure.main$init_opt.invoke(main.clj:277)
    at clojure.main$initialize.invokeStatic(main.clj:308)
    at clojure.main$null_opt.invokeStatic(main.clj:342)
    at clojure.main$null_opt.invoke(main.clj:339)
    at clojure.main$main.invokeStatic(main.clj:421)
    at clojure.main$main.doInvoke(main.clj:384)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.lang.Var.invoke(Var.java:383)
    at clojure.lang.AFn.applyToHelper(AFn.java:156)
    at clojure.lang.Var.applyTo(Var.java:700)
    at clojure.main.main(main.java:37)
Caused by: java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at clojure.lang.RT.classForName(RT.java:2168)
    at clojure.lang.RT.classForName(RT.java:2177)
    at clojure.lang.RT.loadClassForName(RT.java:2196)
    at clojure.lang.RT.load(RT.java:443)
    at clojure.lang.RT.load(RT.java:419)
    at clojure.core$load$fn__5677.invoke(core.clj:5893)
    at clojure.core$load.invokeStatic(core.clj:5892)
    at clojure.core$load.doInvoke(core.clj:5876)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invokeStatic(core.clj:5697)
    at clojure.core$compile$fn__5682.invoke(core.clj:5903)
    at clojure.core$compile.invokeStatic(core.clj:5903)
    at clojure.core$compile.invoke(core.clj:5895)
    at user$eval20$fn__29.invoke(form-init8960082151990763547.clj:1)
    at user$eval20.invokeStatic(form-init8960082151990763547.clj:1)
    at user$eval20.invoke(form-init8960082151990763547.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6927)
    at clojure.lang.Compiler.eval(Compiler.java:6917)
    at clojure.lang.Compiler.eval(Compiler.java:6917)
    at clojure.lang.Compiler.load(Compiler.java:7379)
    ... 14 more
Caused by: java.lang.ClassCastException: taoensso.carmine.protocol.Context cannot be cast to taoensso.carmine.protocol.Context
    at taoensso.carmine.commands$enqueue_request.invokeStatic(commands.clj:211)
    at taoensso.carmine.commands$enqueue_request.invoke(commands.clj:196)
    at taoensso.carmine$keys.invokeStatic(carmine.clj:128)
    at taoensso.carmine$keys.invoke(carmine.clj:128)
    at fu.handler$fn__8942$fn__8943$fn__8944.invoke(handler.clj:35)
    at taoensso.carmine.protocol$_with_replies.invokeStatic(protocol.clj:340)
    at taoensso.carmine.protocol$_with_replies.invoke(protocol.clj:328)
    at fu.handler$fn__8942$fn__8943.invoke(handler.clj:35)
    at fu.handler$fn__8942.invokeStatic(handler.clj:35)
    at fu.handler$fn__8942.invoke(handler.clj:35)
    at fu.handler__init.load(Unknown Source)
    at fu.handler__init.<clinit>(Unknown Source)
    ... 36 more

编译失败:子进程失败 Uberjar因为jar失败而中止:编译失败:子进程失败 使用个人资料执行任务'uberjar'时遇到错误:'embed' Uberjar因为jar失败而中止:编译失败:子进程失败

1 个答案:

答案 0 :(得分:0)

我和monger找到了问题来源。 Redis可以接受使用qualifield关键字,例如。 “#{::用户}”。但是当编译脚本时..像mongodb一样工作,不能再读取关键字了。你可以写,但不能读。也许这是一个错误...(顺便说一句,以防万一我们用uberjar编译..)