2010-08-29 56 views
20

說我創建了一個clojure程序,我必須將其交付給客戶端。客戶端確實有一些計算機知識,但他不知道/想要啓動repl,加載我的程序並運行它。他想雙擊一個EXE文件或運行一個shell腳本運行Clojure程序

我如何打包我的程序並交付(程序本身與clojure罐子)?

回答

22

您有幾種選擇:

  • 編譯程序到Java類,並給出一個主要方法。將它們打包成一個可執行的jar。
  • 以上,如果你使用Leiningen,那麼你可以用lein uberjar很好地組裝一切,確保你已經聲明瞭一個主類。
  • 您可以將項目交替地打包到不可執行的jar(無主類)中,並創建一個shell腳本/批處理文件以執行適當的類,例如java -cp ./clojure.jar:./myprogram.jar com.my.runthis.class
  • 只需將您的.clj文件打包到jar中,然後使用shell /批處理腳本啓動repl,然後自動發出命令,例如java -cp ./clojure.jar:./myprogram.jar clojure.main -e "(in-ns 'your-ns)(start-your-program)" -r
+0

關於clojure.main的參數: -e表示執行? -r是什麼意思? 我可以在哪裏閱讀他們? thx – Belun 2010-08-29 15:03:50

+0

-e表示評估-r表示啓動一個repl。選項在http://clojure.org/repl_and_main上描述 – Greg 2010-08-29 16:29:59

8

最簡單的方法是讓leiningen爲你處理jar,它將所有東西都打包成一個單獨的jar文件,這就像其他java應用一樣需要提供所有的東西。所有客戶端必須做的是雙擊它。如果您需要一個.exe文件launch4j可以爲您創建它,它也可以處理JRE安裝,但它尚未安裝在客戶機上。您不需要任何bash腳本等

6

您可以使用leiningen創建uberjar,正如Greg Harman所寫的那樣... 我個人使用maven創建具有所有依賴關係的獨立jar,聲明主類 - 這簡化了運行它用'java -jar your-jar-file'命令。我也使用Izpack爲我的程序創建安裝程序

2

如果您使用的是蛋糕,我發現這樣做的最佳方法是cake bin。它會爲你生成一個打包的二進制文件(可能與launch4j相同或相似)。