@@ -20,37 +20,45 @@ import Dependencies._
2020import JacocoSetup ._
2121import com .github .sbt .jacoco .JacocoKeys .{jacocoExcludes , jacocoReportSettings }
2222
23+ import sbt ._
24+ import sbt .Keys ._
25+ import sbt .VirtualAxis ._
26+ import sbt .internal .ProjectMatrix
27+ import sbtprojectmatrix .ProjectMatrixKeys ._
28+ import Dependencies ._
29+
2330case class SparkVersionAxis (sparkVersion : String ) extends sbt.VirtualAxis .WeakAxis {
2431 val sparkVersionMinor : String = sparkVersion.split(" \\ ." , 3 ).take(2 ).mkString(" ." )
25- override val directorySuffix = s " -spark ${sparkVersionMinor}"
26- override val idSuffix : String = directorySuffix.replaceAll(""" \W+""" , " _" )
32+ val sparkVersionMajor : String = sparkVersion.split(" \\ ." , 3 ).take(1 )(0 )
33+
34+ override val directorySuffix : String = s " -spark ${sparkVersionMajor}"
35+
36+ // must be unique for all Spark versions for a given Scala version
37+ override val idSuffix : String = s " -spark ${sparkVersionMinor.replaceAll(""" \W+""" , " _" )}"
2738}
2839
40+
2941object SparkVersionAxis {
3042 private def camelCaseToLowerDashCase (origName : String ): String = {
3143 origName
3244 .replaceAll(" ([A-Z])" , " -$1" )
3345 .toLowerCase()
3446 }
3547
36- implicit class ProjectExtension (val projectMatrix : ProjectMatrix ) extends AnyVal {
48+ implicit class ProjectExtension (val p : ProjectMatrix ) extends AnyVal {
3749
3850 def sparkRow (sparkAxis : SparkVersionAxis , scalaVersions : Seq [String ], settings : Def .SettingsDefinition * ): ProjectMatrix = {
39- val sparkVersion = sparkAxis.sparkVersion
40- scalaVersions.foldLeft(projectMatrix)((currentProjectMatrix, scalaVersion) =>
41- currentProjectMatrix.customRow(
42- scalaVersions = Seq (scalaVersion),
43- axisValues = Seq (sparkAxis, VirtualAxis .jvm),
44- _.settings(
45- moduleName := camelCaseToLowerDashCase(
46- name.value.replaceAll(" (Spark2|Spark3)$" , " " ) + sparkAxis.directorySuffix
47- ),
48- libraryDependencies ++= sparkCommonsDependencies(sparkAxis.sparkVersion),
49- jacocoReportSettings := jacocoSettings(sparkVersion, scalaVersion),
50- jacocoExcludes := jacocoProjectExcludes(sparkVersion, scalaVersion)
51- ).settings(settings : _* )
52- )
51+ p.customRow(
52+ scalaVersions = scalaVersions,
53+ axisValues = Seq (sparkAxis, VirtualAxis .jvm),
54+ _.settings(
55+ // must be defined to avoid conflicting target paths for individual spark versions' builds
56+ target := (ThisBuild / baseDirectory).value / " target" / s " ${camelCaseToLowerDashCase(name.value)}${sparkAxis.sparkVersion}-jvm- ${scalaVersion.value.replaceAll(""" \W+""" , " _" )}" ,
57+ moduleName := camelCaseToLowerDashCase(name.value + s " -spark ${sparkAxis.sparkVersionMinor}" ),
58+ libraryDependencies ++= sparkCommonsDependencies(sparkAxis.sparkVersion)
59+ ).settings(settings : _* )
5360 )
5461 }
62+
5563 }
5664}
0 commit comments