【问题标题】:How to access a jar of jars in clojure?如何在clojure中访问一罐罐子?
【发布时间】:2012-08-10 18:34:35
【问题描述】:

我正在将 lein 用于 Clojure 项目,我正在尝试使用 clojars 中的 libgdx 包。从该软件包安装的 jar 文件包含一个 lib 文件夹,其中包含多个用于 gdx 的 jar。

$ jar tf org/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

我已将 lein 项目的公共存储库放在 github 上:Project Link

我将更新该项目,以便在我解决它后作为其他人的示例。

【问题讨论】:

  • 我不是 Java 专家,但看起来 Clojure 的类加载器看不到嵌入式 jar...
  • JVM 的默认类加载器不支持嵌套 jar。有像 One-JAR 这样支持嵌套 jar 的第三方类加载器,但在这里包含第三方类加载器似乎有点矫枉过正。为什么不直接解压缩 libgdx jar,然后自己将每个嵌套的 jar 单独推送到 Clojars?
  • 解决该问题的常用方法是创建一个uberjar
  • @skuro 不幸的是,这不再适用于带标签的阅读器文字。
  • 还有,导入错误libgdx.gdx Game => com.badlogix.gdx Gdx.

标签: java jar clojure libgdx


【解决方案1】:

uberjar 无法工作,因为 clojars 中的文件不是包含类的普通 jar 文件,而是一个真正的文件,您需要下载、提取必要的 jar 并将它们放在项目的类路径或 lib 中.

虽然您可以编写一个精美的类加载器来执行此操作,但这与包含指令的instructions from the libgdx site 相反:

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

更合适的做法是从下载的 jar 中提取 jar 并将它们添加到 clojars 并单独引用它们。或者只是将它们添加到您的本地类路径或存储库中。

【讨论】:

    【解决方案2】:

    只是一个想法,但如果他们这样打包,那么也许他们已经提供了可以做正确事情的精美类加载器?

    另外,您的导入对我来说看起来不正确。向量(不是列表)应该是正确的吗?

    例如

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

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 2012-05-01
      • 2013-06-19
      • 2012-09-03
      相关资源
      最近更新 更多