पर मैं इस project.clj के साथ एक सरल वेब एप्लिकेशन है:जार lein uberjar के साथ उत्पादन में विफल रहता है NoClassDefFoundError
(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")
इस तरह मेरा मुख्य दिखता है:
(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))
आरईपीएल के साथ बस ठीक काम करता है।
java -jar squirrel-money-1.0.0-SNAPSHOT-standalone.jar
यह इस अपवाद के साथ मर जाता है:
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
क्या मैं गलत कर रहा हूँ हालांकि, जब मैं lein uberjar
साथ एक जार पैदा करते हैं और कोशिश के रूप में यह निष्पादित करने के लिए? इसे काम करने के लिए कैसे प्राप्त करें?
यह सुनिश्चित नहीं है कि यह मायने रखता है, लेकिन मैंने देखा कि जार के अंदर मेरी फाइलें, क्लोजर स्वयं और जावा libs को .class फ़ाइलों के रूप में अनपॅक किया गया है, जबकि सभी क्लोजर libs केवल सादे .clj फ़ाइलों के रूप में मौजूद हैं।
यह काम करता है। धन्यवाद! –