【问题标题】:Error importing scalding in sbt project在 sbt 项目中导入烫伤时出错
【发布时间】:2016-08-10 07:15:50
【问题描述】:

我得到了这个错误,为什么要在我的项目 build.sbt 中导入 scalding sbt(ref: How to declare dependency on Scalding in sbt project?)。请帮帮我。

lazy val scaldingCore = ProjectRef(uri("https://github.com/twitter/scalding.git"), "scalding-core")
lazy val myProject = project in file(".") dependsOn scaldingCore

错误:导入 SBT 项目时出错:
...
[警告] ==== 公众:尝试 [警告]
https://repo1.maven.org/maven2/com/twitter/scalding-core_2.10/0.16.0-SNAPSHOT/scalding-core_2.10-0.16.0-SNAPSHOT.pom [信息] 解决 org.scala-lang#scala-compiler;2.10.4 ... [信息] 解决 org.scala-lang#scala-reflect;2.10.4 ... [信息] 解决 org.scala-lang#jline;2.10.4 ... [信息] 正在解决 org.fusesource.jansi#jansi;1.4 ... [警告] :::::::::::::::::::::::::::::::::::::::::::::: [警告]: :
未解决的依赖::[警告] :::::::::::::::::::::::::::::::::::::::::::::: [警告]: : com.twitter#scalding-core_2.10;0.16.0-SNAPSHOT:未找到 [警告] :::::::::::::::::::::::::::::::::::::::::::::: [警告] [警告] 注意: 未解决的依赖路径:[警告] com.twitter:scalding-core_2.10:0.16.0-SNAPSHOT [警告] +- myproject:myproject_2.10:0.1-SNAPSHOT [trace] 堆栈跟踪被抑制: 运行 'last myProject/:update' 以获得完整输出。 [trace] 堆栈跟踪 抑制:完整运行 'last myProject/:ssExtractDependencies' 输出。 [错误] (myProject/:update) sbt.ResolveException: 未解决 依赖项:com.twitter#scalding-core_2.10;0.16.0-SNAPSHOT:未找到 [错误] (myProject/:ssExtractDependencies) sbt.ResolveException: 未解决的依赖关系:com.twitter#scalding-core_2.10;0.16.0-SNAPSHOT: 没找到

【问题讨论】:

  • 嗯,这是一个未解决的依赖错误。您可能缺少 Scalding 项目的解析器。你的 build.sbt 是什么样的?
  • 发布您的build.sbt 文件。
  • 我建议尝试使用我编写的 SBT 插件来开始使用:github.com/danosipov/sbt-scalding-plugin

标签: scala twitter sbt scalding


【解决方案1】:

烫伤publishes jars on Sonatype Maven Central,所以你真的不需要弄乱Git ProjectRef。你只需要让你的 sbt resolvers 正确,这样它就可以找到罐子。从您的build.sbt 开始:

resolvers ++= Seq(
  Resolver.sonatypeRepo("releases"),
  "Concurrent Maven Repo" at "http://conjars.org/repo"
)

级联 publishes to the Conjars repository 而不是 Central,因此您很可能需要如图所示的额外解析器。

最初尝试这些,如果您仍然遇到未解决的错误,您可能需要添加 additional repos that Scalding uses,具体取决于您需要依赖的工件 - 您可能确实不需要需要整个 @ 987654331@ uber-artifact,您可以根据项目的需要将其缩减为scalding-corescalding-commonsscalding-repl,也许还有其他。

所以要清楚,而不是 ProjectRefdependsOn scaldingCore,添加上面的解析器和类似这样的东西:

libraryDependencies ++= {
  val scaldingVersion = "0.16.0-RC6"

  Seq(
    "com.twitter" %% "scalding-core"    % scaldingVersion
  , "com.twitter" %% "scalding-commons" % scaldingVersion
  , "com.twitter" %% "scalding-repl"    % scaldingVersion
  )
}

等等。

【讨论】:

  • 错误:scalac:编译期间未捕获的异常:scala.reflect.internal.Types$TypeError 错误:scalac:错误:错误的符号引用。 SchemedSource.class 中的签名指的是包 org.apache.hadoop 中不可用的术语 mapred。当前类路径中可能完全缺少它,或者类路径上的版本可能与编译 SchemedSource.class 时使用的版本不兼容。 ....但是,我在使用以下代码进行测试时得到了上述结果:
  • import com.twitter.scalding._ import com.twitter.scalding.ReplImplicits._ import com.twitter.scalding.ReplImplicitContext._ import cascading.pipe.Pipe class product { val data = Tsv( "/resources/products.tsv") data.read }
  • 啊,所以 scalding-core has a dependency on hadoop-client 带有“provided”范围——这意味着它在编译时需要,但预计会出现在运行时环境中(即在 Hadoop 作业中运行时)。您可能需要在项目中添加自己的类似依赖项声明,例如"org.apache.hadoop" % "hadoop-client" % "2.5.0" % "provided".
  • 啊,他们真的需要为此更新 Scalding 文档。这应该是一个非常常见的工作流程,几乎网络上的所有内容和他们的 wiki 似乎都已过时且不完整……您将想要构建一个“胖 jar”来部署您的项目—this 是一个好的开始,但它是也过时了。
  • 这是一个使用 SBT 的相对较新的示例项目,您可能可以从它的构建配置中进行调整:github.com/deanwampler/scalding-workshop
猜你喜欢
  • 2019-02-12
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2014-06-19
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多