我需要与Scala 2.10和2.11(最终也是2.12)交叉构建项目。作为2.10一部分的一些软件包,例如解析器组合器,在2.11中独立打包。因此,它们不需要在2.10版本中提及,但在2.11中是必需的。此外,可能有不止一个这样的包,需要使用通用版本。
我发现documentation re: cross-building on the SBT site在这里缺乏帮助。而且,虽然有几个与此主题相关的StackOverflow Q& As,但我找不到解决这个问题的问题。
答案 0 :(得分:4)
解决方案如下(仅显示 build.sbt 的相关部分):
scalaVersion := "2.10.6"
crossScalaVersions := Seq("2.10.6","2.11.8")
val scalaModules = "org.scala-lang.modules"
val scalaModulesVersion = "1.0.4"
val akkaGroup = "com.typesafe.akka"
lazy val akkaVersion = SettingKey[String]("akkaVersion")
lazy val scalaTestVersion = SettingKey[String]("scalaTestVersion")
akkaVersion := (scalaBinaryVersion.value match {
case "2.10" => "2.3.15"
case "2.11" => "2.4.1"
})
scalaTestVersion := (scalaBinaryVersion.value match {
case "2.10" => "2.2.6"
case "2.11" => "3.0.1"
})
libraryDependencies ++= (scalaBinaryVersion.value match {
case "2.11" => Seq(
scalaModules %% "scala-parser-combinators" % scalaModulesVersion,
scalaModules %% "scala-xml" % scalaModulesVersion,
"com.typesafe.scala-logging" %% "scala-logging" % "3.4.0"
)
case _ => Seq()
}
)
libraryDependencies ++= Seq(
akkaGroup %% "akka-actor" % akkaVersion.value % "test",
"org.scalatest" %% "scalatest" % scalaTestVersion.value % "test"
)
请注意,此解决方案还解决了如何根据二进制版本设置依赖项版本的问题。我认为这可能会在Stackoverflow的其他地方解决,但在这里它们都在同一个地方。