したがって、一般的に名前空間の要求とインポートを理解していると思います。たとえば、Clojureソースコードのディレクトリ構造は次のとおりです。clojure/ src / clj / clojure / java/io.clj。つまり、次のようなものが必要になる可能性があります。
user> (ns foo
(:require [clojure.java.io :as io]))
nil
foo> io/copy
#<io$copy clojure.java.io$copy@35f784d7>
これは、この名前空間clojure.java.ioにあるio.cljファイルにcopyという関数があると解釈します。これは、その名前空間が必要になったときに使用できるようになりました。
さて、私の具体的な質問です。ライブラリを使用する必要がありますが、jarがMavenにないため、標準的な方法でローカルリポジトリを設定し、正常に動作します。だから私は今2つの場所に必要な瓶を持っています:
/Users/ryanmoore/projects/proj_foo/maven_repo/net/sf/picard/1.86
と
/Users/ryanmoore/.m2/repository/net/sf/picard/1.86
問題はjar内にあり、クラスには次のような名前が付いています。
net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactory.class
net/sf/picard/io/FastLineReader.class
net/sf/picard/metrics/MetricsFile.class
net/sf/picard/reference/FastaSequenceIndexEntry.class
これらのクラスを要求するのに問題があります。例:
user> (require '[net.sf.picard.io/FastLineReader :as flr])
FileNotFoundException Could not locate FastLineReader__init.class or FastLineReader.clj on classpath: clojure.lang.RT.load (RT.java:432)
一致しない名前やパスと関係があると思います。このスタックの質問では、Clojureで名前空間を使用するための一般的な規則は何ですか?、ディレクトリ構造内のファイルはnamesapcesと一致する必要があると述べています。一致しないと、Clojureはそれらを見つけることができません。
私の質問は、Clojureがすべてを見つけることができるように、フォルダーをどのように設定する必要があるかということです。
注:Clojarsにはpicardtoolsのバージョンがありますが、これは古いバージョンです。さらに、私はそれを試してみましたが、上記と同じ種類の問題がありました。
編集:mobyteの回答のおかげで、「Javaクラスはインポートされます。必須ではありません」というメッセージが表示されるようになりました。ここからclojure/leiningenでJavaクラスを要求する方法が参照されています。