2012-08-10 20 views
2

我正在使用lein進行Clojure項目,我嘗試使用clojars中的libgdx包。從該軟件包安裝的jar文件包含一個lib文件夾,其中包含多個用於gdx的jar文件。如何在clojure中訪問一罐罐子?

$罐子TF組織/ clojars/AMU/libgdx/0.92/libgdx-0.9.2.jar

lib/ 
lib/gdx-openal.jar 
lib/gdx-backend-jogl-natives.jar 
lib/gdx-backend-android.jar 
lib/gdx-backend-lwjgl.jar 
lib/gdx-backend-lwjgl-natives.jar 
lib/gdx.jar 
lib/gdx-natives.jar 
lib/gdx-backend-jogl.jar 

我還增加了以下依賴到我project.clj:[org.clojars.amu/libgdx「0.9.2」]

我不確定的是我如何使用:use和:require關鍵字訪問libgdx jar中的每個jar包?

(ns game.core 
    (:import (libgdx.gdx Game)) <- does not work 

我已經把一個公共倉庫的雷音項目了GitHub上的位置:Project Link

,以便它可以作爲一個例子他人一旦我有它解決了我會更新該項目。

+0

我不是Java專家,但看起來,這Clojure的類裝載器並不見嵌入式罐子... – 2012-08-11 08:01:23

+0

JVM的默認類加載器不支持嵌套的罐子。有第三方類加載器,如[One-JAR](http://one-jar.sourceforge.net/)支持嵌套jar,但包括第三方類加載器似乎有點矯枉過正。你爲什麼不解壓libgdx jar,然後把每個嵌套jar分別推送給Clojars? – DaoWen 2012-08-12 06:02:40

+0

這個問題的一個常見方法是創建一個[uberjar](https://github.com/technomancy/leiningen/blob/master/src/leiningen/uberjar.clj) – skuro 2012-08-13 06:11:38

回答

0

uberjar不會工作,因爲clojars中的文件不是包含類的正常jar文件,而是真正的文件,您可以下載它,提取必要的jar文件並將它們放在classpath或lib中項目。

雖然可以編寫一個奇特的類加載器要做到這一點,那去違背instructions from the libgdx site其中包括指令:

Download the nightly zip and place gdx.jar and gdx-sources.jar in the libs folder. 

更合適的事情做的是從下載JAR提取罐,並添加他們到clojars並單獨提及他們。這或者只是將它們添加到您的本地類路徑或回購。

0

只是一個想法,但如果他們打包它那樣,那麼他們可能已經提供了花哨的類加載器,將做正確的事情?

此外,您的導入對我來說看起來不正確。應該是向量(不是列表)正確嗎?

例如

(ns warscore.swing 
    (:import 
    [java.awt Color ] 
    [java.awt.event MouseEvent] 
    [javax.swing DefaultCellEditor JCheckBox JLabel JTable JTextField ] 
    [javax.swing.table DefaultTableCellRenderer ]))