我需要使用Scala 2.10和2.11(最终也是2.12)来交叉构建一个项目。2.10中的某些程序包(例如解析器组合器)在2.11中独立打包。因此,它们不需要在2.10版本中提及,而在2.11版本中是必需的。此外,可能有不止一个这样的程序包,而这些程序包需要使用通用版本。
我发现文档re:SBT网站上的交叉构建在这里有点缺乏帮助。而且,尽管有几个与此主题相关的StackOverflow问答,但我找不到一个可以解决这一特定问题的问题。
解决方案如下(仅显示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"
)
Run Code Online (Sandbox Code Playgroud)
注意,该解决方案还解决了如何根据二进制版本设置依赖项版本的问题。我认为这可以在Stackoverflow的其他地方解决,但在同一地方。
| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |