在 sbt 项目中导入烫伤时出错
Posted
技术标签:
【中文标题】在 sbt 项目中导入烫伤时出错【英文标题】:Error importing scalding in sbt project 【发布时间】: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
【参考方案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-core
、scalding-commons
、scalding-repl
,也许还有其他。
所以要清楚,而不是 ProjectRef
和 dependsOn 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以上是关于在 sbt 项目中导入烫伤时出错的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 9 CLI webworker 中导入 mathjs 时出错
尝试在 application.js 中导入 npm 包 (easyMDE) 时出错 - (未捕获的 ReferenceError:EasyMDE 未定义)