Kon*_*rus 6 clojure compojure leiningen
我有一个简单的web应用程序与这个project.clj:
(defproject squirrel-money "1.0.0-SNAPSHOT"
:description "Squirrel Money"
:dependencies [[org.clojure/clojure "1.2.0"]
[org.clojure/clojure-contrib "1.2.0"]
[compojure "0.5.3"]
[ring/ring-jetty-adapter "0.3.5"]
[hiccup "0.3.1"]
[postgresql "8.4-701.jdbc4"]
[clj-time "0.2.0-SNAPSHOT"]]
:dev-dependencies [[lein-eclipse "1.0.0"]]
:main squirrel-money.main
:repl-init-script "src/squirrel_money/init_repl.clj")
Run Code Online (Sandbox Code Playgroud)
我的主要看起来像这样:
(ns squirrel-money.main
(:gen-class)
(:use
[compojure.core]
[ring.adapter.jetty])
(:require
[compojure.route :as route]
[squirrel-money.savings :as savings]))
(defn launch [routedef]
(run-jetty routedef {:port 17080}))
(defroutes money-routes
(GET "/savings" [] (savings/render))
(route/not-found "Page not found"))
(defn -main [& args] (launch money-routes))
Run Code Online (Sandbox Code Playgroud)
使用REPL工作得很好.但是,当我生成一个jar lein uberjar并尝试执行它时:
java -jar squirrel-money-1.0.0-SNAPSHOT-standalone.jar
Run Code Online (Sandbox Code Playgroud)
它死于这个例外:
Exception in thread "main" java.lang.NoClassDefFoundError: compojure/response/Renderable
at squirrel_money.main$fn__1067.invoke(main.clj:18)
at squirrel_money.main__init.load(Unknown Source)
at squirrel_money.main__init.<clinit>(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at clojure.lang.RT.loadClassForName(RT.java:1578)
at clojure.lang.RT.load(RT.java:399)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4511.invoke(core.clj:4905)
at clojure.core$load.doInvoke(core.clj:4904)
at clojure.lang.RestFn.invoke(RestFn.java:409)
at clojure.lang.Var.invoke(Var.java:365)
at squirrel_money.main.<clinit>(Unknown Source)
Caused by: java.lang.ClassNotFoundException: compojure.response.Renderable
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 13 more
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何让它工作?
不确定是否重要,但我注意到在jar中我的文件,clojure本身和Java库被解压缩为.class文件,而所有clojure库仅作为普通的.clj文件存在.
这似乎是 leinigen 1.4.0 的一个错误。您可能想尝试使用 leiningen 1.3.1 创建 uberjar。
编辑:
Leiningen 1.4.0 删除非项目.class文件以解决 Clojure 错误(请参阅CLJ-322)。显然这种行为有时会引起问题。
您可以通过.class在:keep-non-project-classes您true的project.clj.
有关更多信息,请参阅相关的leinigen 问题。
| 归档时间: |
|
| 查看次数: |
3144 次 |
| 最近记录: |