Apache Hbase をデータストアとして使用するアプリケーションに取り組んでいます。いくつかの一般的な hbase 操作の周りに clojure ラッパーをコーディングしました。
https://github.com/mobiusinversion/hbase
そしてそれをclojarsにプッシュしました。
私の hbase ラッパーでは、Bytes クラスをインポートします。
(ns hbase.table
(:gen-class)
(:refer-clojure :exclude [get])
(:import [clojure.lang PersistentVector PersistentArrayMap]
[org.apache.hadoop.hbase.util Bytes]
[org.apache.hadoop.hbase.client Put Get HTable Scan]))
次に、「wtf」と呼ばれる別のプロジェクトで、ラッパーを依存関係として宣言します。これはうまく機能し、単純に jar を clojars からプルします。
MacBook-Pro-2:wtf $ lein do clean, deps
... blah blah
Retrieving org/mortbay/jetty/jsp-2.1/6.1.14/jsp-2.1-6.1.14.jar from central
Retrieving ant/ant/1.6.5/ant-1.6.5.jar from central
Retrieving commons-el/commons-el/1.0/commons-el-1.0.jar from central
Retrieving net/java/dev/jets3t/jets3t/0.6.1/jets3t-0.6.1.jar from central
Retrieving hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar from central
Retrieving oro/oro/2.0.8/oro-2.0.8.jar from central
Retrieving org/eclipse/jdt/core/3.1.1/core-3.1.1.jar from central
Retrieving org/codehaus/jackson/jackson-mapper-asl/1.8.8/jackson-mapper-asl-1.8.8.jar from central
Retrieving hbase/hbase/0.1.1/hbase-0.1.1.jar from clojars
MacBook-Pro-2:wtf $
ただし、Bytes クラス (および他のすべての Hadoop クラス) は新しいプロジェクトで見つかりません。
$ lein repl
nREPL server started on port 58693
REPL-y 0.1.10
Clojure 1.5.1
Exit: Control+D or (exit) or (quit)
Commands: (user/help)
Docs: (doc function-name-here)
(find-doc "part-of-name-here")
Source: (source function-name-here)
(user/sourcery function-name-here)
Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
(user/clojuredocs name-here)
(user/clojuredocs "ns-here" "name-here")
user=> (use 'hbase.schema)
ClassNotFoundException org.apache.hadoop.hbase.HTableDescriptor java.net.URLClassLoader$1.run (URLClassLoader.java:202)
user=> (use 'hbase.config)
ClassNotFoundException org.apache.hadoop.hbase.HBaseConfiguration java.net.URLClassLoader$1.run (URLClassLoader.java:202)
user=> (use 'hbase.table)
ClassNotFoundException org.apache.hadoop.hbase.util.Bytes java.net.URLClassLoader$1.run (URLClassLoader.java:202)
user=>
なぜ Hadoop クラスが Leiningen によって依存関係として取り込まれていないのか、私の clojars デプロイメントの一部としてパッケージ化されていないのか、私にはわかりません。これらのクラスを表示するにはどうすればよいですか???