Sbt: Cross-compile in multiproject setup


#1

I would like to have an sbt build involving the following subprojects:

  • foo-shared
    crossScalaVersions := Seq("2.11.12", "2.12.4")
  • foo-app (2.12, depends on foo-shared)
    scalaVersion := "2.12.4"
  • foo-spark (2.11, depends on foo-shared)
    scalaVersion := "2.11.12"

Independently of each other, the project tests and builds already seem to work with this naive setup, i.e. I can do

++ 2.11.12
fooSpark/test
fooSpark/assembly

and

++ 2.12.4
fooApp/test
fooApp/assembly

However, there’s a few remaining issues:

  • How can I run the full tests for all projects at once? If I just do sbt test, the fooSpark tests will fail due to a NoSuchMethodError, apparently due to picking up the wrong version of fooShared.
  • How can I trigger the builds in Jenkins, i.e. how would I orchestrate ++ <version> or equivalent from the outside?

I’m still wondering whether my overall approach makes sense. I’m not entirely fluent in multiproject builds, yet, and this is my first venture into cross-compiling, and I haven’t found much information on the combination of the two. (May just be a lack of Google fu on my side, though.) Any hints, pointers and suggestions appreciated.

Thanks,
Patrick