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 に答える