Scala 如何让HBase与sbt';什么是依赖关系管理?

Scala 如何让HBase与sbt';什么是依赖关系管理?,scala,hadoop,hbase,thrift,sbt,Scala,Hadoop,Hbase,Thrift,Sbt,我正试图让一个使用CDH3的Hadoop和HBase的sbt项目启动。我正在尝试使用project/build/project.scala文件来声明对HBase和Hadoop的依赖关系。(我承认我对sbt、maven和ivy的理解有点弱。如果我说了什么或做了什么蠢事,请原谅。) Hadoop依赖关系让一切都进展顺利。添加HBase依赖项会导致对Thrift 0.2.0的依赖,对于Thrift 0.2.0,似乎没有回购协议,或者从这听起来是这样 所以,真的,我有两个问题: 1.老实说,我不想依赖T

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

Hadoop依赖关系让一切都进展顺利。添加HBase依赖项会导致对Thrift 0.2.0的依赖,对于Thrift 0.2.0,似乎没有回购协议,或者从这听起来是这样

所以,真的,我有两个问题: 1.老实说,我不想依赖Thrift,因为我不想使用HBase的Thrift接口。有没有办法告诉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>
scalaVersion:=“2.9.0-1”
解析程序+=“ClouderRepo”athttps://repository.cloudera.com/content/repositories/releases"
libraryDependencies++=Seq(
“org.apache.hadoop”%“hadoop核心”%“0.20.2-cdh3u0”,
“org.apache.hbase”%“hbase”%“0.90.1-cdh3u0”
)
ivyXML:=
看看这个,节俭是在回购中的。你可以把它添加到你的项目中,它应该会变得节俭。我以为SBT会明白这一点,但这是SBT、Ivy和Maven的交叉点,所以谁能真正说出真正应该发生什么

如果您真的不需要节俭,可以使用内联常春藤XML排除依赖项,如文档所示

覆盖def ivyXML=
Re:将jar转储到lib目录中,这将是短期收益,长期损失。这当然更方便,如果这是你下周要扔掉的一些概念证明,那就扔进罐子里,忘掉它吧。但是对于任何一个生命周期超过几个月的项目来说,花时间进行正确的依赖关系管理是值得的

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

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

  • 我有一个在github上使用Hadoop的sbt项目的非常简单的示例:

    查看
    project/build/WordCountProject.scala
    ,其中我定义了一个名为
    ClouderaMavenRepo
    的变量,该变量定义了Cloudera存储库位置,以及名为
    hadoopCore
    的变量,该变量定义了Hadoop jar的特定信息


    如果您在浏览器中访问Cloudera repo,您应该能够导航到相应的Hive信息。

    谢谢,@dave!ivyXml位成功了。我认为sbt没有选择节俭的原因是~rawson回购不在其受欢迎的回购清单中。
    override def ivyXML = 
      <dependencies>
        <exclude module="thrift"/>
      </dependencies>