这是后续 这个问题.

运行“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

解决了问题。

有帮助吗?

解决方案

如果您使用的是 Leiningen 1.2,您可能会遇到一个错误,即依赖项会在创建 uberjar 之前被删除(显然违背了 uberjar 的目的)。请降级到 1.1 并等待新版本(应该很快就会发布)或使用 lein 的 HEAD 进行检查(如 lein 的 README 中有关破解 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 清单中指定的类路径(如果有)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top