这是这个问题的后续。
运行 "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" 结尾)包含了所有内容,而第二个文件与用 "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解决了这个问题。
-jar
,则会忽略-cp
(以及$CLASSPATH
)。 您必须使用-cp
并手动指定主类(如果它被称为your-app.main
,请说java -cp ... your-app.main
,并在末尾添加任何传递给您的main
方法(= Clojure 函数-main
)的参数)。我应该在阅读问题时注意到这一点...将其编辑到答案中。 - Michał Marczykclojure.jar
和clojure-contrib.jar
的内容,则它可能存在问题。包含依赖项是使用uberjar的全部意义所在!(这使得使用java -jar
命令成为可能。) - Michał Marczyk-jar
模式下肯定是需要的。感谢你指出来! - Michał Marczyk