2016-01-21 51 views
2
  1. 我正在閱讀關於clojure.org關於編譯的documention,最後一部分是gen-class示例。我做的例子,然後當試圖運行它作爲Java應用程序:java -cp ./classes:clojure.jar clojure.examples.hello Fred在終端我得到:Error: Could not find or load main class clojure.examples.hello。有人可以幫忙嗎?關於彙編和gen-class的Clojure.org文檔

  2. 有人可以介紹到哪裏瞭解GEN-類:創一流的,我覺得不是網絡

+0

開始您在運行'java -cp'命令的目錄中是否有類目錄?試圖找到一個文件名爲Clojure的/例子/ hello.class – DanLebrero

+0

我已經產生了一些項目** ** TST與leiningen,並有一個classes目錄中:** TST /目標/ +基地+系統+用戶戴夫** 。所以我cd目錄**基礎+系統+用戶+戴夫**,從那裏我運行'java -cp ./classes:clojure.jar tst.core弗雷德'和我得到:'在線程中的異常「主「java.lang.NoClassDefFoundError:clojure/lang/IFn'錯誤,我嘗試'java -cp ./classes:clojure.jar tst Fred',我得到了'錯誤:無法找到或加載主類tst' – amirteymuri

回答

4

從基地+系統+用戶+戴夫命令java -cp ./classes:clojure.jar tst.core多文檔幾乎是正確的。 java.lang.NoClassDefFoundError: clojure/lang/IFn錯誤是因爲JVM找不到Clojure類,因爲base+system+user+dave目錄中沒有clojure.jar文件,所以您需要指定clojure.jar文件的正確路徑。

當您使用的是lein時,它將您的項目依賴關係下載到您的local repository。其中一個依賴項是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,將創建在target目錄中的文件名爲您的項目名稱,standalone.jar,將已獲得所有必要類,所以要從命令行運行它到目標目錄並運行類似於:

java -cp tst-standalone.jar tst.core 

要了解更多關於類路徑如何在JVM中工作的信息,您可以從Wikipedia

+0

感謝您的詳細的答案,但不是他們仍然適合我!我從** base + system + user + dave運行'java -cp ./classes:~/.m2/repository/org/clojure/clojure/1.7.0/clojure-1.7.0.jar tst.core' DIR並獲得:'異常在線程「主要」 java.lang.NoClassDefFoundError:Clojure的/郎/ IFn' – amirteymuri

+0

你必須找到您的系統正在使用Clojure的罐子的位置,並將其插入到命令。 – Alex