2012-08-10 50 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 ]))