pro*_*eek 13 clojure leiningen
这是这个问题的后续行动.
运行'lein jar'后,我得到'myproject-1.0.0-SNAPSHOT.jar',它不包含clojure-1.2.0-beta1.jar和clojure-contrib-1.2.0-beta1.jar.
运行'lein uberjar'给了我两个jar文件.第一个(以-standalone.jar结尾)是jar包含所有内容,第二个与使用'lein jar'生成的jar相同.
这是第二个罐子的问题.使用第一个jar运行没问题,正如我在上一篇文章中所解释的那样.
我跑的时候
java -cp PATH_TO_THE_CLOJURE_AND_CONTRIB.jar:$CLASSPATH -jar myproject-1.0.0-SNAPSHOT.jar'
,我收到以下错误.
Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn
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)
可能有什么问题,如果我使用-cp选项指向jar文件,我认为我可以像'myproject-1.0.0-SNAPSHOT-standalone.jar'一样使用'myproject-1.0.0-SNAPSHOT.jar'.
还有什么我必须做的吗?
java -cp ALLTHE_JAR_PATH myproject.core
解决了这个问题.
Mic*_*zyk 10
如果你正在使用Leiningen 1.2,那么你很可能会遇到一个错误,即在创建一个uberjar之前就会删除依赖关系(显然会击败uberjar).请降级到1.1并等待新版本(应该很快到达)或使用lein的HEAD结帐(如lein的自述文件中关于黑客Leiningen的部分所述).
一旦你这样做,你应该能够制作一个独立的jar,lein uberjar并说java -jar name-of-your-standalone.jar启动你的应用程序.
作为替代方案,你可以创建一个普通的jar,lein jar并说出类似的东西java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main(your-app.main你的应用程序的主类在哪里;当然,$PROJECT_ROOT用适当的路径替换并提供路径your-app.jar).这个lib/*东西只适用于JDK 1.6; 1.5,你必须分开包括每个罐子.请注意,当使用-jar,-cp并且$CLASSPATH被忽略; 只考虑jar的清单中指定的类路径(如果有的话).