如何在Clojure REPL中要求一个jar文件?

时间:2012-11-05 05:50:28

标签: java clojure

来自clojure的require套餐很容易:

user=> (require 'clojure.core)
nil

但是如何在Clojure中需要.jar文件?

(我正在努力学习lein。Leiningen对大型项目而不是小型脚本非常有用。所以我想弄清楚什么是使用{{1}的最佳方法在我的Clojure脚本和REPL中打包。)

5 个答案:

答案 0 :(得分:4)

虽然可以在Pomegranate库的帮助下在运行时向应用程序添加jar,但我们强烈建议不要这样做:

  1. 它隐藏了外部的依赖关系,最终用户不会知道他们需要它来运行代码。
  2. jar本身可以依赖于其他jar文件(因此会给最终用户带来压力以解决它)
  3. 我想我正在重复其他受访者,但我认为我会添加点来验证他们的建议。

    事实上,lein2在封面下使用了石榴,只是为了在需要依赖之后不必重新启动REPL。它仅用于开发目的。

答案 1 :(得分:3)

我认为你不能。必须在类路径上使用JAR启动REPL。

答案 2 :(得分:1)

查看Pomegranate库。

答案 3 :(得分:1)

因此,在Ubuntu 14.04上检查man clojure我的REPL后,我选择了-cp选项(这是-classpath的缩写):

clojure -cp ./path/to/package.jar
user=> (require `clojure.package)

事实上,作为参考,我想分享使用jar库的示例。因为它可能对不熟悉Java(以及所有机器)的人有用,但是想要使用这个好的lisp来编写脚本/短小程序,因此不需要leiningen。

示例是:您想要解析一些包含CSV内容的文件并以某种方式使用它。

  • 文件系统上的文件以标准clojure.java.io
  • 进行访问
  • 使用外部package data.csv
  • 解析CSV内容

the link from the READMEdata.csv.jar下载classpathhttp://search.maven.org/remotecontent?filepath=org/clojure/data.csv/0.1.4/data.csv-0.1.4.jar

将其放入当前工作目录并打开REPL,添加clojure -cp ./data.csv-0.1.4.jar Clojure 1.4.0 user=> ; now you have it user=> (require '[clojure.data.csv :as csv]) nil user=> 的路径:

{{1}}

答案 4 :(得分:0)

您可以使用此solution

在repl中:

user=>(def cl (-> (Thread/currentThread) (.getContextClassLoader)))
;; need load dependicies before, using the same method
user=>(-> cl (.addURL (java.net.URL. "file:///c:/Users/dev/m2/repository/cheshire/cheshire/5.3.1/cheshire-5.3.1.jar")))
user=>(require '[cheshire.core :as json])