gpt4 book ai didi

scala - 我怎样才能让 HBase 与 sbt 的依赖管理配合得很好?

转载 作者:可可西里 更新时间:2023-11-01 14:46:11 24 4
gpt4 key购买 nike

我正在尝试启动一个使用 CDH3 的 Hadoop 和 HBase 的 sbt 项目。我正在尝试使用 project/build/Project.scala 文件来声明对 HBase 和 Hadoop 的依赖关系。 (我承认我对 sbt、maven 和 ivy 的掌握有点薄弱。如果我说或做一些愚蠢的事情,请原谅我。)

Hadoop 依赖项使一切顺利进行。添加 HBase 依赖项导致对 Thrift 0.2.0 的依赖项,似乎没有 repo 协议(protocol),或者从这个 SO post. 听起来是这样的

所以,真的,我有两个问题:1. 老实说,我不想依赖 Thrift,因为我不想使用 HBase 的 Thrift 接口(interface)。有没有办法告诉 sbt 跳过它?2.有没有更好的方法来设置它?我是否应该将 HBase jar 转储到 lib 目录中并继续?

更新 这是 sbt 0.10 build.sbt 文件,它完成了我想要的:

scalaVersion := "2.9.0-1"

resolvers += "ClouderaRepo" at "https://repository.cloudera.com/content/repositories/releases"

libraryDependencies ++= Seq(
"org.apache.hadoop" % "hadoop-core" % "0.20.2-cdh3u0",
"org.apache.hbase" % "hbase" % "0.90.1-cdh3u0"
)

ivyXML :=
<dependencies>
<exclude module="thrift"/>
</dependencies>

最佳答案

查看 HBase POM file , Thrift 位于 http://people.apache.org/~rawson/repo 的仓库中.您可以将它添加到您的项目中,它应该可以找到 Thrift。我原以为 SBT 会解决这个问题,但这是 SBT、Ivy 和 Maven 的交叉点,所以谁能真正说出真正应该发生的事情。

如果您真的不需要 Thrift,您可以使用内联 Ivy XML 排除依赖项,如文档所述on the SBT wiki .

override def ivyXML = 
<dependencies>
<exclude module="thrift"/>
</dependencies>

Re: 将jar 转储到lib 目录中,那将是短期的 yield ,长期的损失。这当然更方便,如果这是你下周要扔掉的一些概念证明,那么一定要扔进 jar 里,忘掉它。但对于任何生命周期超过几个月的项目,花时间正确进行依赖管理是值得的。

虽然所有这些工具都有其挑战,但好处是:

  1. 依赖性分析可以告诉您何时您的直接依赖性具有冲突的传递性依赖性。在使用这些工具之前,这通常会导致奇怪的运行时行为或方法未找到异常。
  2. 升级非常简单。只需更改版本号、更新即可。
  3. 它避免了必须将二进制文件提交给版本控制。当需要合并分支时,它们可能会出现问题。
  4. 除非您有关于如何对 lib 目录中的二进制文件进行版本控制的明确政策,否则很容易忘记您拥有的版本。

关于scala - 我怎样才能让 HBase 与 sbt 的依赖管理配合得很好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com