【问题标题】:including jars in clojure包括 clojure 中的罐子
【发布时间】:2012-06-04 19:06:14
【问题描述】:

我已经下载并安装了一个带有 Maven 的 jar(如回答 here),但现在我需要在项目中使用它。我按照git README ((require '[clj-http.client :as client])) 上的说明进行操作,但仍然出现此错误:

FileNotFoundException Could not locate clj_http/client__init.class or clj_http/client.clj on classpath:   clojure.lang.RT.load (RT.java:430)

【问题讨论】:

    标签: java jar clojure classpath


    【解决方案1】:

    这个线程上的其他答案肯定会起作用....但是直接在机器的 CLASSPATH 或命令行中添加 jar 可能是一个非常困难的开发策略。 . .

    在 clojure 应用程序中包含 jars 的最常见、惯用的方法是 Leiningen(简单,一步安装在 github 上——初学者应该检查此答案末尾的注释以获取警告)... Leiningen 还可以安装 clojure 环境并为您启动您的 repl,并预加载正确的 jar 环境。

    它本质上是一个 java 依赖管理器和构建工具合二为一 - 即像 ivy 或我们用于 java 开发的 maven Pom.xml。

    几个如何使用 Leiningen 以简单且可扩展的方式与多个库进行交互的示例:

    启动一个 repl,这样你的 project.clj 文件中的 jars 就在类路径上:

    lein repl
    

    更新你的 Maven 仓库中的 jars 由你的 project.clj 指定:

    lein deps
    

    最后,lein 让您导出类似于“fatjars”的“uberjars”,即它们为您捆绑了所有依赖项。

    关于新 Lein 版本的小更新:初学者注意。

    您可以运行两个脚本来安装 Leiningan,运行这个可能更安全:

    https://github.com/jayunit100/leiningen/blob/stable/bin/lein稳定版

    而不是这个:

    https://raw.github.com/technomancy/leiningen/preview/bin/lein最新更新,预览)。

    【讨论】:

    • 这比我愿意在没有讨论的情况下对其他人的帖子进行更多的内容更改——但恕我直言,粗体确实大大降低了此处的可读性。去掉第一段并去掉第二段可能会得到一个更清晰的答案。
    【解决方案2】:

    当你启动java进程时你需要做的:

    java -cp ./lib/clj-http.jar ./lib/clojure.jar clojure.main
    

    基本上,您需要类路径中的 clojure.jar(REPL 所在的位置)和 clj-http.jar。

    假设 clj-http.jar 在 ./lib/ 目录中。或者您可以使用 lein(构建工具,类似于 maven)构建您的项目并让它构建一个 uberjar,这就是我要做的。这里有一个很好的设置 lein 和构建 uberjar 的演练:http://zef.me/2470/building-clojure-projects-with-leiningen

    【讨论】:

    • 所以每当我添加依赖项时,我都必须构建一个 uberjar?我在 ~/.clojure 创建了一个文件夹,我将在其中转储我所有的 jar。我试过java -cp ~/.clojure/clj-http-0.4.1.jar clojure.main 但没有运气。不喜欢最后一部分
    • 克里斯:我的 clojure bash 脚本给你参考:github.com/number23/iLibrary/blob/master/clojure/clojure
    • 所以每次我想运行 REPL 时都必须在类路径中添加一些东西?听起来……不太理想
    • 认为如果你使用 lein,并运行lein repl,它将运行 repl,并在你的 project.clj 文件中设置任何依赖项。或者,您可以编写自己的启动器脚本,将 ./lib 中的任何内容添加到已启动的 java 进程的类路径中。但最终它只是java。所以是的,您确实需要以某种方式在类路径中设置依赖项。
    • 另一个选项是设置 CLASSPATH 环境变量,但每次打开新 shell 时都需要这样做。
    【解决方案3】:

    在启动 clojure repl 之前将 clj-http.jar 添加到 CLASSPATH 或 CP。

    【讨论】:

    • 我查了add-classpath,它已被弃用。如何将 jar 添加到类路径?
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2015-06-27
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多