2009-10-14 117 views
17

我有一個clojure項目,它使用了我試圖以可執行jar文件的形式運行的slick 2d遊戲引擎。我在Netbeans和Eclipse中創建了這個項目,並且我沒有把它們導出爲可執行格式。它不斷給錯誤找不到主要類,然後給我的主要類。我試圖編輯清單文件,更改名稱,希望它能找到它,但目前爲止沒有運氣。從clojure項目創建一個可執行的jar文件?

它確實在開發環境中運行,但不在其外部。

回答

13

自從我發佈這個問題已經有一段時間了,我認爲我會堅持自己發現的,因爲對於任何需要的人這個問題回答了。

我現在使用Leiningen來管理我的項目,雖然我已經開始玩cljr這是一個可以補充它的repl和包管理器。這兩者都可以使生成可運行jar文件變得更簡單。

以Leiningen爲例,使用網站上的說明進行設置,然後在您的工作區中調用lein new。這將創建一個文件夾來存放您的項目以及源文件的子文件夾,並測試自述文件和project.clj文件。

使用您將使用的依賴項編輯project.clj。開發依賴關係是您需要純粹用於開發的依賴關係,例如下面示例中所示的swank-clojure。

(defproject myproject "0.0.1-SNAPSHOT" 
    :description "My Personal Project." 
    :url "http://example.com/my-project" 
    :dependencies [[org.clojure/clojure "1.1.0"] 
       [org.clojure/clojure-contrib "1.1.0"] 
       [**other dependencies**]] 
    :dev-dependencies [[swank-clojure "1.2.1"]] 
    :main [org.myproject.core]) 

我發現自吹,Clojure的有用,你可以再鍵入lein swank開始,你可以通過emacs的連接到斯旺克實例。

:main定義了什麼名稱空間包含-main函數。

調用lein uberjar將創建一個獨立的jar,然後運行。

希望能幫助任何有我的問題的人!

+0

'錯誤:無法找到或加載主類[prueba.core]'。我已經包含了':main'及其相應的值,並且我有一個在該名稱空間中公用的'-main'函數。任何想法可能會出錯? – m0skit0 2014-12-15 15:40:13

+0

Hi @ m0skit0,我寫這篇文章已經有一段時間了。你有沒有適當的結構化你的目錄?我的意思是你的'project.clj'在包含'src'的文件夾中包含'prueba'包含'core.clj'?您是否使用'lein new '然後編輯創建的'core.clj'文件?如果不是,你能否儘可能清楚地解釋你所做的事情? – toofarsideways 2014-12-17 23:06:34

+0

項目結構是正確的,因爲它是由Leiningen創建的。我最終通過'defproject'的':main root.scriptlauncher:aot [root.scriptlauncher]'使用了以下語法來實現它的工作。 – m0skit0 2014-12-18 11:21:28

3

我必須將clojure.jar和clojure-contrib.jar添加爲項目的「依賴項」,以使其包含在jar中。一旦我得到了,我能夠運行生成的罐子。請記住,Netbeans有自己的clojure.jar,用於自行運行插件,並且不需要與程序使用的clojure.jar相同。 Netbeans有一個添加庫的菜單。您需要將clojure [-contrib] .jar添加到構建庫和運行庫

+0

我已經嘗試添加,作爲一個編譯時間和運行時間庫的項目,但沒有運氣到目前爲止。 – toofarsideways 2009-10-16 12:01:32

相關問題