2013-07-08 49 views
1

我正在使用Apache Hbase作为其数据存储的应用程序。我编写了周围的一些常见的HBase操作的Clojure的包装,Lein部署在Clojars和依赖项上

https://github.com/mobiusinversion/hbase

,并推到clojars。

https://clojars.org/hbase

在我的HBase的包装我导入字节类:

(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])) 

然后在另一个项目叫“跆拳道”我宣布包装纸作为依赖,而这种效果很好,它只是拉从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 $ 

然而字节类(和所有其他的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部署包装。我怎样才能让这些类可见?

回答

0

原来,这是关系到其依赖关系声明的限定词的顺序:

这并没有注册HBase的依赖

(defproject hbase "0.1.0" 
:description "HBase Access in Clojure" 
:license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} 
:url "https://github.com/mobiusinversion/hbase" 
:dependencies [ 
    [org.clojure/clojure "1.5.1"] 
     [org.apache.hadoop/hadoop-core "1.2.0"] 
    [org.apache.hadoop/hadoop-test "1.2.0" :scope "test"] 
    [org.apache.hbase/hbase "0.94.6.1" :classifier "tests" :scope "test"] 
    [org.apache.hbase/hbase "0.94.6.1"]] 
:plugins [[lein-marginalia "0.7.1"]]) 

然而,这:

(defproject hbase "0.1.3" 
:description "HBase Access in Clojure" 
:license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} 
:url "https://github.com/mobiusinversion/hbase" 
:dependencies [ 
    [org.clojure/clojure "1.5.1"] 
    [org.apache.hadoop/hadoop-core "1.2.0"] 
    [org.apache.hbase/hbase "0.94.6.1"] 
    [org.apache.hadoop/hadoop-test "1.2.0"] 
    [org.apache.hbase/hbase "0.94.6.1" :classifier "tests" :scope "test"]] 
:plugins [[lein-marginalia "0.7.1"]])