0

我从如下文件编译了一个 uberjar:

(defmain HadoopTest (:use 'cascalog.api) (defn bla ("alot of code"))

我在hadoop上运行那个uberjar,比如:

$ hadoop jar myStandalone.jar clojure.main

我得到了一个 REPL,但该文件中没有任何内容被执行。我仍然需要手动输入 (:use 'cascalog.api) 和 (defn bla)。为什么会这样,我该如何解决?

多谢!

4

1 回答 1

1

如果您为其提供类名,hadoop jar <jar file> [<main class>] ...它将调用main该类中包含的方法。由于您在clojure.main这里使用,因此将启动 REPL(因为这clojure.main.main()是应该做的)。

因此,要么使用正确的类(我猜是你的 AOT 编译的 Clojure 命名空间),要么将该信息存储在你的 Uberjar 中(例如,通过:main项目文件中的 Leiningen 密钥)并省略类名,只调用hadoop jar myStandalone.jar.

于 2013-10-29T15:00:51.520 回答