1

したがって、一般的に名前空間の要求とインポートを理解していると思います。たとえば、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クラスを要求する方法が参照されています。

4

1 に答える 1

1

importJavaクラスで使用する必要があります

(import '[net.sf.picard.io FastLineReader])

requireClojureライブラリ用です:http://clojuredocs.org/clojure_core/clojure.core/require

于 2013-03-07T01:16:28.003 に答える