如何让sbt为不同的库版本编译不同的源?

问题描述 投票:0回答:1

我知道使用 SBT 可以轻松跨不同 Scala 版本进行交叉构建。您只需将无法编译的文件放在

scala-2.10
scala-2.11
目录中,而不是
scala
中。但是,如果我想针对不同版本的 Scala 不同版本的依赖项(例如 Spark 1.6 和 2.1)进行交叉构建,那么该怎么做呢?

scala sbt cross-build
1个回答
0
投票

我为不同的 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(): _*)
© www.soinside.com 2019 - 2024. All rights reserved.