Clojure / HBase:如何在v0.94.6.1中导入HBaseTestingUtility

时间:2013-07-01 18:06:38

标签: unit-testing clojure hbase

在Clojure中,如果我想使用hbase测试实用程序启动测试集群,我必须使用以下命令注释我的依赖项:

[org.apache.hbase/hbase "0.92.2" :classifier "tests" :scope "test"]

首先,我不知道这意味着什么。根据leiningens样本project.clj

;; Dependencies are listed as [group-id/name version]; in addition
;; to keywords supported by Pomegranate, you can use :native-prefix
;; to specify a prefix. This prefix is used to extract natives in
;; jars that don't adhere to the default "<os>/<arch>/" layout that
;; Leiningen expects.

问题1:这是什么意思?

问题2:如果我升级版本:

[org.apache.hbase/hbase "0.94.6.1" :classifier "tests" :scope "test"]

然后我收到一个ClassNotFoundException

Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration

这里发生了什么,我该如何解决?

2 个答案:

答案 0 :(得分:2)

添加到依赖项声明中的任何键/值对都用作clojure石榴库的参数

识别的密钥列在源代码中:in the source to pomagranate(以供将来参考,它是函数resolve-artifacts的链接*)

the maven pom docs may also be helpful

:scope描述了使用依赖项的条件,因此:scope“test”似乎表明依赖项仅在测试时被拉入

:分类器似乎表明了一个额外的元素区分版本

我推测新版hbase版本的依赖项解析可能配置不当,而且没有正确声明其依赖关系。尝试查找org.apache.hadoop.hbase.HBaseConfiguration的信息并手动要求包。

答案 1 :(得分:1)

Leinigen使用Maven dependency mechanism。阅读该链接以了解不同的范围。

“分类器”是作为依赖关系坐标一部分的标记,因此一组Jars / zip文件/等可以是同一逻辑发行版的一部分,但在pom.xml中声明为不同的依赖项。所以在这种情况下,“tests”是一个独特的HBase工件,来自0.94.6.1,包含测试。

您可以通过将浏览器指向该版本HBase的Maven“Central”仓库位置来查看此操作:

http://repo1.maven.org/maven2/org/apache/hbase/hbase/0.94.6.1/

您可以在这里搜索maven“central”repo:

https://repository.apache.org/

http://mvnrepository.com/

On ClassNotFOundException - 同意noisesmith。最好的办法是找到包含该类的依赖项(jar),并将其显式添加到项目依赖项配置中。

通常我会在google上搜索classname和“jar”,即 https://www.google.com/search?q=jar+org.apache.hadoop.hbase.HBaseConfiguration