2
  1. 我正在阅读clojure.org 上关于编译的文档,最后一部分是 gen-class 示例。我做了示例,然后在尝试将其作为 java 应用程序运行时:java -cp ./classes:clojure.jar clojure.examples.hello Fred在终端中我得到 : Error: Could not find or load main class clojure.examples.hello。有人可以帮忙吗?

  2. 有人可以介绍在哪里了解 gen-class 和 :gen-class,我在网上找不到太多文档

4

1 回答 1

4

您的 base+system+user+dave的命令java -cp ./classes:clojure.jar tst.core几乎是正确的。该java.lang.NoClassDefFoundError: clojure/lang/IFn错误是因为JVM找不到Clojure类,因为目录中没有clojure.jar文件base+system+user+dave,因此您需要为clojure.jar文件指定正确的路径。

在您使用lein时,它会将您的项目依赖项下载到您的本地存储库。其中一个依赖项将是 Clojure 本身,因此假设您在 iOS/Linux 上并且您的 lein project.clj 与 clojure 1.7.0 有依赖项,从 base+system+user+dave 目录运行的命令将是:

java -cp ./classes:~/.m2/repository/org/clojure/clojure/1.7.0/clojure-1.7.0.jar tst.core 

一旦你有多个依赖项,这会变得很烦人,我建议使用lein uberjar它将在名为 your-project-name-standalone.jar 的目录中创建一个文件,该文件target将包含所有必需的类,因此从命令运行它行转到目标目录并运行类似:

java -cp tst-standalone.jar tst.core

要了解有关类路径在 JVM 中如何工作的更多信息,您可以从Wikipedia开始

于 2016-01-22T01:24:35.413 回答