2

在 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

这是怎么回事,我该如何解决?

4

2 回答 2

2

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

已识别的键在此处的源中列出:在 pomagranate 的源中(供将来参考,它是指向函数 resolve-artifacts* 的链接)

maven pom 文档也可能有帮助

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

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

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

于 2013-07-02T15:12:35.050 回答
1

Leinigen 使用Maven 依赖机制。阅读该链接以了解不同的范围。

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

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

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

您可以在此处搜索 maven“中央”存储库:

https://repository.apache.org/

或者

http://mvnrepository.com/

ClassNotFOundException- 同意噪声史密斯。您最好的选择是找到包含该类的依赖项(jar)并将其显式添加到您的项目依赖项配置中。

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

于 2013-07-02T19:15:40.640 回答