我知道使用 SBT 可以轻松跨不同 Scala 版本进行交叉构建。您只需将无法编译的文件放在
scala-2.10
和 scala-2.11
目录中,而不是 scala
中。但是,如果我想针对不同版本的 Scala 和 不同版本的依赖项(例如 Spark 1.6 和 2.1)进行交叉构建,那么该怎么做呢?
我为不同的 Apache Spark 版本构建 Spark PDF 数据源解决了这个问题。我为公共代码和 Spark 的每个版本创建了几个子项目文件夹。这是与此相关的 sbt 文件的一部分:
val sparkVersion = scala.util.Properties.envOrElse("SPARK_VERSION", "3.5.0")
val packageName =
sparkVersion match {
case sparkVersion if sparkVersion.startsWith("3.3") => "spark-pdf-spark33"
case sparkVersion if sparkVersion.startsWith("3.4") => "spark-pdf-spark34"
case _ => "spark-pdf-spark35"
}
lazy val common = (project in file("common"))
.settings(
name := "common",
commonSettings
)
.disablePlugins(AssemblyPlugin)
lazy val spark35 = (project in file("spark35"))
.settings(
name := "spark35",
commonSettings,
)
.disablePlugins(AssemblyPlugin)
.dependsOn(common)
lazy val spark34 = (project in file("spark34"))
.settings(
name := "spark34",
commonSettings,
)
.disablePlugins(AssemblyPlugin)
.dependsOn(common)
lazy val spark33 = (project in file("spark33"))
.settings(
name := "spark33",
commonSettings,
)
.disablePlugins(AssemblyPlugin)
.dependsOn(common)
lazy val root = (project in file("."))
.settings(
name := packageName,
commonSettings,
)
.dependsOn(dependencyModules():_*)
.aggregate(aggregatedModules(): _*)