require
从clojure打包很容易:
user=> (require 'clojure.core)
nil
但是我怎样才能.jar
在 Clojure 中需要一个文件呢?
(我正在努力学习lein
。Leiningen 对大型项目而不是小型脚本很有用。所以我想弄清楚jar
在我的 Clojure 脚本和 REPL 中使用包的最佳方法是什么。)
尽管可以借助Pomegranate库在运行时将 jar 添加到应用程序,但强烈建议不要这样做:
我想我在重复其他受访者,但我想我会添加要点来验证他们的建议。
事实上,lein2 在幕后使用了 pomegranate,只是为了在需要依赖后不必重新启动 REPL。它仅用于开发目的。
我不认为你可以。REPL 必须使用类路径上的 JAR 启动。
看看石榴图书馆。
因此,man clojure
在 Ubuntu 14.04 上检查我的 REPL 让我有了-cp
选择(这是 的缩写-classpath
):
clojure -cp ./path/to/package.jar
user=> (require `clojure.package)
事实上,作为参考,我想分享一个使用jar
库的示例。因为它可能对不熟悉 Java(以及所有机器)但想将这个漂亮的 lisp 用于脚本/简短的小程序的人有用,因此不需要 leiningen。
示例是:您想解析一些具有 CSV 内容的文件并以某种方式使用它。
clojure.java.io
,data.csv
data.csv.jar
按照自述文件中的链接下载:http ://search.maven.org/remotecontent?filepath=org/clojure/data.csv/0.1.4/data.csv-0.1.4.jar
将它放在您当前的工作目录中并打开 REPL 添加路径classpath
:
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=>
您可以使用此解决方案。
在回复中:
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])