在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
这里发生了什么,我该如何解决?
答案 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/
或
On ClassNotFOundException
- 同意noisesmith。最好的办法是找到包含该类的依赖项(jar),并将其显式添加到项目依赖项配置中。
通常我会在google上搜索classname和“jar”,即 https://www.google.com/search?q=jar+org.apache.hadoop.hbase.HBaseConfiguration