require
clojure からパッケージ化するのは簡単です:
user=> (require 'clojure.core)
nil
.jar
しかし、 Clojure 内でファイル を要求するにはどうすればよいでしょうか?
(私は学習しようとしていlein
ます。Leiningen は、小さなスクリプトよりも大きなプロジェクトに役立ちます。そのためjar
、Clojure スクリプトと REPL でパッケージを使用する最良の方法は何かを理解したいと考えています。)
Pomegranateライブラリを使用して、実行時にjarをアプリケーションに追加することは可能ですが、次のように強くお勧めしません。
他の回答者も繰り返していると思いますが、アドバイスを検証するためにポイントを追加したいと思いました。
実際のところ、lein2は、依存関係が必要になった後にREPLを再起動する必要がないようにするために、裏でザクロを使用しています。開発目的のみです。
私はあなたができるとは思わない。REPL は、クラスパス上の JAR で開始する必要があります。
Pomegranateライブラリを参照してください。
したがって、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
README のリンク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])