在虚拟轴上交叉构建

Note

文档中的食谱部分以最少说明聚焦于目标。

目标

我想在表示 Apache Spark 版本的虚拟轴上进行交叉构建。

步骤

  1. 在本地定义弱轴:

project/Axis.scala

import sbt.*

case class SparkAxis(idSuffix: String, directorySuffix: String)
  extends VirtualAxis.WeakAxis
  1. 定义带自定义行的项目矩阵。以下示例为 Spark 3 构建 Scala 2.12 和 2.13,为 Spark 4 构建 Scala 2.13 和 3:

build.sbt

lazy val scala212 = "2.12.21"
lazy val scala213 = "2.13.18"
lazy val scala3 = "3.8.4"
lazy val spark3 = SparkAxis(idSuffix = "Spark3", directorySuffix = "spark3")
lazy val spark4 = SparkAxis(idSuffix = "Spark4", directorySuffix = "spark4")

organization := "com.example"
version := "0.1.0-SNAPSHOT"

lazy val app = (projectMatrix in file("app"))
  .settings(
    name := "app"
  )
  .customRow(
    scalaVersions = Seq(scala212, scala213),
    axisValues = Seq(spark3, VirtualAxis.jvm),
    settings = Seq(
      moduleName := name.value + "_spark3",
      libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.8",
    )
  )
  .customRow(
    scalaVersions = Seq(scala213, scala3),
    axisValues = Seq(spark4, VirtualAxis.jvm),
    settings = Seq(
      moduleName := name.value + "_spark4",
      libraryDependencies += ("org.apache.spark" %% "spark-core" % "4.1.0")
        .cross(CrossVersion.for3Use2_13),
    )
  )
  1. 将源代码放在 app/src/main/scala 下:

app/src/main/scala/example/A.scala

package example

import org.apache.spark.SparkContext

object A {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext("local", "test")
    sc.stop()
  }
}

确认可以运行:

sbt:virtual-axis-root> appSpark4/run
[info] running (fork) example.A
Using Spark's default log4j profile: org/apache/spark/log4j2-defaults.properties
26/05/05 00:00:00 INFO SparkContext: Running Spark version 4.1.0