9

requireclojure からパッケージ化するのは簡単です:

user=> (require 'clojure.core)
nil

.jarしかし、 Clojure 内でファイル を要求するにはどうすればよいでしょうか?

(私は学習しようとしていleinます。Leiningen は、小さなスクリプトよりも大きなプロジェクトに役立ちます。そのためjar、Clojure スクリプトと REPL でパッケージを使用する最良の方法は何かを理解したいと考えています。)

4

5 に答える 5

4

Pomegranateライブラリを使用して、実行時にjarをアプリケーションに追加することは可能ですが、次のように強くお勧めしません。

  1. 依存関係を外部から隠し、エンドユーザーはコードを実行するために依存関係が必要であることを知りません。
  2. jar自体は他のjarファイルに依存する可能性があります(したがって、エンドユーザーがそれを理解するのに負担がかかります)

他の回答者も繰り返していると思いますが、アドバイスを検証するためにポイントを追加したいと思いました。

実際のところ、lein2は、依存関係が必要になった後にREPLを再起動する必要がないようにするために、裏でザクロを使用しています。開発目的のみです。

于 2012-11-05T21:08:55.897 に答える
3

私はあなたができるとは思わない。REPL は、クラスパス上の JAR で開始する必要があります。

于 2012-11-05T06:08:44.617 に答える
1

Pomegranateライブラリを参照してください。

于 2012-11-05T10:10:25.083 に答える
1

したがって、man clojureUbuntu 14.04 で REPL を確認すると、-cpオプション (の略-classpath)が表示されます。

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

jar実際、参考までに、ライブラリの使用例を共有したいと思います。Java (およびすべての機械) に慣れていない人にとっては役立つかもしれませんが、このナイス Lisp をスクリプティング/ショート ナイス スモール プログラムに使用したいため、leiningen は必要ありません。

例: 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=> 
于 2017-07-22T15:10:26.673 に答える
0

このソリューションを使用できます。

代わりに:

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])
于 2017-02-13T13:27:04.350 に答える