build.sbt (123 lines of code) (raw):

import com.timushev.sbt.updates.UpdatesPlugin.autoImport.dependencyUpdatesFilter import sbt.Keys.parallelExecution import sbt.{Compile, moduleFilter, _} import sbtassembly.AssemblyPlugin.autoImport.assembly lazy val scala212 = "2.12.19" lazy val scala213 = "2.13.13" lazy val supportedScalaVersions = List(scala212, scala213) // factor out common settings ThisBuild / scalaVersion := scala212 ThisBuild / scalacOptions ++= Seq("-target:jvm-1.8") // Publishing Info ThisBuild / credentials ++= Publishing.Creds ThisBuild / homepage := Some(url("https://github.com/datastax/spark-cassandra-connector")) ThisBuild / licenses := List("Apache 2" -> new URL("http://www.apache.org/licenses/LICENSE-2.0.txt") ) ThisBuild / organization := "com.datastax.spark" ThisBuild / organizationName := "Datastax" ThisBuild / organizationHomepage := Some(url("https://www.datastax.com")) ThisBuild / pomExtra := Publishing.OurDevelopers ThisBuild / pomIncludeRepository := { _ => false } ThisBuild / publishMavenStyle := true ThisBuild / publishTo := Publishing.Repository ThisBuild / scmInfo := Publishing.OurScmInfo ThisBuild / version := Publishing.Version Global / resolvers ++= Seq( DefaultMavenRepository, Resolver.sonatypeRepo("public") ) lazy val IntegrationTest = config("it") extend Test lazy val integrationTestsWithFixtures = taskKey[Map[TestDefinition, Seq[String]]]("Evaluates names of all " + "Fixtures sub-traits for each test. Sets of fixture sub-traits names are used to form group tests.") lazy val assemblySettings = Seq( assembly / parallelExecution := false, assembly / test := {}, assembly / assemblyMergeStrategy := { case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard case PathList("META-INF", xs @ _*) => MergeStrategy.last case "module-info.class" => MergeStrategy.discard case x => val oldStrategy = (assemblyMergeStrategy in assembly).value oldStrategy(x) }, assembly / assemblyOption := (assemblyOption in assembly).value.copy(includeScala = false), assembly / assemblyShadeRules := { Seq( ShadeRule.rename("com.typesafe.config.**" -> s"shade.com.datastax.spark.connector.@0").inAll ) }, ) lazy val commonSettings = Seq( // dependency updates check dependencyUpdatesFailBuild := true, dependencyUpdatesFilter -= moduleFilter(organization = "org.scala-lang" | "org.eclipse.jetty"), fork := true, parallelExecution := true, testForkedParallel := false, testOptions += Tests.Argument(TestFrameworks.JUnit, "-v"), ) val annotationProcessor = Seq( "-processor", "com.datastax.oss.driver.internal.mapper.processor.MapperProcessor" ) def scalacVersionDependantOptions(scalaBinary: String): Seq[String] = scalaBinary match { case "2.11" => Seq() case "2.12" => Seq("-no-java-comments") //Scala Bug on inner classes, CassandraJavaUtil, case "2.13" => Seq("-no-java-comments") //Scala Bug on inner classes, CassandraJavaUtil, } lazy val root = (project in file(".")) .disablePlugins(AssemblyPlugin) .aggregate(connector, testSupport, driver, publishableAssembly) .settings( // crossScalaVersions must be set to Nil on the aggregating project crossScalaVersions := Nil, publish / skip := true ) lazy val connector = (project in file("connector")) .configs(IntegrationTest) .settings(Defaults.itSettings: _*) //This and above enables the "it" suite .settings(commonSettings) .settings(assemblySettings) .settings( crossScalaVersions := supportedScalaVersions, name := "spark-cassandra-connector", javacOptions ++= Seq("-source", "1.8", "-target", "1.8"), // test grouping integrationTestsWithFixtures := { Testing.testsWithFixtures((testLoader in IntegrationTest).value, (definedTests in IntegrationTest).value) }, IntegrationTest / testGrouping := Testing.makeTestGroups(integrationTestsWithFixtures.value), IntegrationTest / testOptions += Tests.Argument("-oF"), // show full stack traces Test / javacOptions ++= annotationProcessor ++ Seq("-d", (classDirectory in Test).value.toString), Global / concurrentRestrictions := Seq(Tags.limitAll(Testing.parallelTasks)), libraryDependencies ++= Dependencies.Spark.dependencies ++ Dependencies.Compatibility.dependencies(scalaVersion.value) ++ Dependencies.TestConnector.dependencies ++ Dependencies.Jetty.dependencies, scalacOptions in (Compile, doc) ++= scalacVersionDependantOptions(scalaBinaryVersion.value) ) .dependsOn( testSupport % "test", driver ) lazy val testSupport = (project in file("test-support")) .disablePlugins(AssemblyPlugin) .settings(commonSettings) .settings( crossScalaVersions := supportedScalaVersions, name := "spark-cassandra-connector-test-support", libraryDependencies ++= Dependencies.Compatibility.dependencies(scalaVersion.value) ++ Dependencies.TestSupport.dependencies ) lazy val driver = (project in file("driver")) .disablePlugins(AssemblyPlugin) .settings(commonSettings) .settings( crossScalaVersions := supportedScalaVersions, name := "spark-cassandra-connector-driver", assembly /test := {}, libraryDependencies ++= Dependencies.Compatibility.dependencies(scalaVersion.value) ++ Dependencies.Driver.dependencies ++ Dependencies.TestDriver.dependencies :+ ("org.scala-lang" % "scala-reflect" % scalaVersion.value) ) /** The following project defines an extra artifact published alongside main 'spark-cassandra-connector'. * It's an assembled version of the main artifact. It contains all of the dependent classes, some of them * are shaded. */ lazy val publishableAssembly = project .disablePlugins(AssemblyPlugin) .settings( crossScalaVersions := supportedScalaVersions, name := "spark-cassandra-connector-assembly", Compile / packageBin := (assembly in (connector, Compile)).value )