【发布时间】:2017-05-28 02:31:08
【问题描述】:
我是 Scala 和 SBT 的新手,为了学习新的东西,我正在尝试阅读 "Building a recommendation engine with Scala" 这本书。本书中引用的示例库现在已被更高版本替换,或者在某些情况下似乎被不同技术(casbah 到 Mongo Scala 驱动程序)所取代。这导致我生成了一些可能不正确的 SBT 构建文件。有了我的初始构建文件,我有;
name := "BuildingScalaRecommendationEngine"
scalaVersion := "2.12.1"
version :="1.0"
libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.1.0"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.1"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.1.0"
libraryDependencies += "org.apache.kafka" % "kafka_2.12" % "0.10.2.0"
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.5.1"
这会导致生成错误,例如;
[error] Modules were resolved with conflicting cross-version suffixes in {file:/C:/Dev/learning/scala/Tutorial/src/}src:
[error] org.scala-lang.modules:scala-xml _2.11, _2.12
java.lang.RuntimeException: Conflicting cross-version suffixes in: org.scala-lang.modules:scala-xml
我尝试按照this link 建议的一些示例进行操作,这些示例是我在一些 Gitter 对话here 中找到的。在这一点上,这些建议都超出了我的理解。
我通过将构建文件修改为如下所示,通过反复试验设法解决了该错误;
name := "BuildingScalaRecommendationEngine"
scalaVersion := "2.12.1"
version :="1.0"
libraryDependencies += "org.apache.spark" % "spark-mllib_2.11" % "2.1.0" excludeAll(
ExclusionRule(organization = "org.scala-lang.modules")
)
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.1" excludeAll(
ExclusionRule(organization = "org.scala-lang.modules")
)
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.1.0" excludeAll(
ExclusionRule(organization = "org.scala-lang.modules")
)
libraryDependencies += "org.apache.kafka" % "kafka_2.12" % "0.10.2.0" excludeAll(
ExclusionRule(organization = "org.scala-lang.modules")
)
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.5.1" excludeAll(
ExclusionRule(organization = "org.scala-lang.modules")
)
我可以用我的原始构建文件做些什么来解决这个错误吗?
是否有库依赖值的组合首先导致了这种情况?
我的目标是更好地了解 Scala 和 SBT 以克服这一点,但同时也有点令人沮丧。
【问题讨论】: