【问题标题】:Using Java jar in Clojure+在 Clojure+ 中使用 Java jar
【发布时间】:2015-04-11 16:51:00
【问题描述】:

我是clojure的新手。我正在尝试在 clojure 中使用 java jar,但它似乎不起作用。 我已经建立了路径,将 jar 物理放在项目的 lib 文件夹中并尝试了:

(导入'jml.clustering.NMF)

但我得到了这个例外:

ClassNotFoundException jml.clustering.NMF java.net.URLClassLoader.findClass (:-1)

我该如何解决这个问题?提前谢谢你。

【问题讨论】:

标签: java jar import clojure


【解决方案1】:

仅将 jar 粘贴到 lib 目录中不会强制 leiningen 将 jar 包含在类路径中。相反,请尝试将库添加到项目的依赖项列表中:

:dependencies [[org.clojure/clojure "1.6.0"]
               [org.realityforge.jml/jml "0.9.3"]]

您可以通过搜索支持的公共存储库之一找到可用库的组/ID 和版本。我searched maven.org for jml 找到我上面使用的信息。

请注意,这不使用您本地的 jar 副本,而是从存储库下载一个新的并将其缓存在某个地方。这可能并不理想,但对于我自己的项目,我发现让 lein 使用本地 jar 实在是太让人头疼了。使用 clojars 或 maven.org 中的一个要简单得多,我可以忽略必须下载一个新副本。

【讨论】:

  • 感谢您的澄清:),这可能会起作用,但这不是我要使用的 jml,而且我看到我需要的 jml 没有在 maven.org 注册: (我的头痛还在继续……谢谢。
  • 如果您使用mvn 将您需要的版本安装到本地缓存中,lein 将能够在那里找到它。
  • @Savas - lein 使得使用不在公共存储库中的任何东西都变得非常困难。我认为他们实际上是故意这样做的,因为他们想鼓励开发人员让其他人更容易复制项目并让它在不同的系统上运行。我在上面的评论中发布了指向另一个相关问题的链接。我希望这会有所帮助。
  • 谢谢大家。您的所有建议都有帮助,我也使用此链接elangocheran.com/blog/2013/03/… 来解决我的问题。在我使用“&”等字符命名我的用户之前,我为自己创建了一个额外的,因此使用 cmd 玩起来非常“有趣”。
【解决方案2】:

如果 JAR 是您自己的,您可以按照以下步骤使用任何 maven 存储库中不可用的本地 JAR。

给定一个罐子:foo.jar

进入你的 Clojure 项目目录:

mvn deploy:deploy-file -DgroupId=local -DartifactId=foo \
 -Dversion=1.0.0 -Dpackaging=jar -Dfile=foo.jar \
 -Durl=file:repo

编辑您的 project.clj 以包含新的依赖项:

 [local/foo "1.0.0"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多