VirtualAxis に対するクロスビルド
目的
Apache Spark バージョンを表す VirtualAxis に対してクロスビルドしたい。
手順
- ローカルで弱い軸を定義する:
import sbt.*
case class SparkAxis(idSuffix: String, directorySuffix: String)
extends VirtualAxis.WeakAxis
- カスタム列を持つ project matrix を定義する。以下の例では、Spark 3 に対しては Scala 2.12 と 2.13、Spark 4 に対しては Scala 2.13 と 3 をビルドする。
lazy val scala212 = "2.12.21"
lazy val scala213 = "2.13.18"
lazy val scala3 = "3.8.3"
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),
)
)
app/src/main/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