sbt-cross-build-depenon-example показывает, как кросс-сборка проекта, состоящего из нескольких подпроектов , где подпроекты
разных версий Scala зависит от родительского проекта.
С учетом scala-parent
проекта и scala-2.11
и scala-2.12
подпроектов, которые dependsOn
scala-parent
, тогда
установите crossScalaVersions
на scala-parent
, а настройку scalaVersion
для подпроектов, например,
lazy val scalaParent = (project in file("scala-parent")).settings(crossScalaVersions := Seq("2.11.0", "2.12.0"))
lazy val scala211 = (project in file("scala-2.11")).dependsOn(scalaParent).settings(scalaVersion := "2.11.0")
lazy val scala212 = (project in file("scala-2.12")).dependsOn(scalaParent).settings(scalaVersion := "2.12.0")
Также установите crossScalaVersions := Seq()
для проекта root
, который объединяет другие проекты:
lazy val root = (project in file("."))
.aggregate(scalaParent, scala211, scala212)
.settings(
name := "sbt-cross-build-dependson-example",
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test,
crossScalaVersions := Seq() // https://github.com/sbt/sbt/issues/4262#issuecomment-405607763
)
Теперь выполнение sbt +compile
(обратите внимание на +
) должно привести к перекрестной сборке проекта:
sbt:sbt-cross-build-dependson-example> +compile
[info] Setting Scala version to 2.12.0 on 2 projects.
...
[info] Updating scala212...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-parent/target/scala-2.12/classes ...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-2.12/target/scala-2.12/classes ...
...
[info] Setting Scala version to 2.11.0 on 2 projects.
...
[info] Updating scala211...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-parent/target/scala-2.11/classes ...
[info] Compiling 1 Scala source to /Users/mario/IdeaProjects/sbt-cross-build-dependson-example/scala-2.11/target/scala-2.11/classes ...
Обратите внимание, как scala-parent
был скомпилирован для 2.11 и 2.12
> tree -d -L 1 scala-parent/target/
scala-parent/target/
├── scala-2.11
├── scala-2.12
в то время как подпроекты создавались только для их соответствующих версий
> tree -d -L 1 scala-2.11/target/
scala-2.11/target/
├── scala-2.11
tree -d -L 1 scala-2.12/target/
scala-2.12/target/
├── scala-2.12